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

时间:2015-07-03 04:52:34

标签: c# visual-studio tfs visual-studio-addins

所以,我试图在自定义构建工作流参数编辑器中显示所有可用的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

为什么这不起作用的任何提示?

1 个答案:

答案 0 :(得分:0)

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

你实际上可以像这样得到TFS连接:

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