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

Get TFS Connection in Custom Build Workflow Parameter Editor

因此,我试图在自定义构建工作流参数编辑器中显示所有可用的 TFS 测试套件。 See my previous question.

现在我可以像普通客户端应用程序一样使用 .Net TFS API 建立到我的 TFS 实例的连接。但是我必须在自定义程序集中将 URL 嵌入到我的 TFS 中,这是我想避免的事情。

这让我开始思考:此代码在 Visual Studio 内运行,因此它一定能够以某种方式获取有关当前 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;