在自定义生成工作流参数编辑器中获取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

为什么这不起作用有什么提示吗?

在自定义生成工作流参数编辑器中获取TFS连接

因此,事实证明,您根本不必使用DTE

实际上,您可以获得这样的TFS连接:

var builddef = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition));
var tpc = builddef.BuildServer.TeamProjectCollection;
var tp = builddef.TeamProject;