在自定义生成工作流参数编辑器中获取TFS连接
本文关键字:获取 TFS 连接 编辑器 参数 自定义 工作流 | 更新日期: 2023-09-27 18:00:57
因此,我尝试在自定义构建工作流参数编辑器中显示所有可用的TFS测试套件。请参阅我之前的问题。
现在,我可以像普通客户端应用程序一样,通过使用.Net TFS API来建立与TFS实例的连接。但我必须将TFS的URL嵌入到自定义程序集中,这是我希望避免的。
这让我思考:这段代码在VisualStudio中运行,因此一定可以以某种方式获得有关当前TFS连接的信息。在搜索完网页后,许多不同的网站展示了如何在普通的Visual Studio扩展中实现这一点的代码。所以我把这样的东西放在一起:
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
if (provider != null)
{
EnvDTE80.DTE2 dte;
dte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.12.0");
MessageBox.Show("Got dte: " + dte.ActiveDocument.ToString());
TeamFoundationServerExt ext = dte.DTE.GetObject("Microsoft.VisualStudio.TeamFoundation.TeamFoundationServerExt") as TeamFoundationServerExt;
MessageBox.Show("Got tfs: " + ext);
我可以得到DTE对象,调用它的ToString((方法会得到System.__ComObject
,所以这部分看起来很有效。但当我试图获得TeamFoundationServerExt
对象时,我总是得到null
为什么这不起作用有什么提示吗?
因此,事实证明,您根本不必使用DTE
。
实际上,您可以获得这样的TFS连接:
var builddef = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition));
var tpc = builddef.BuildServer.TeamProjectCollection;
var tp = builddef.TeamProject;