Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在自定义生成工作流参数编辑器中获取TFS连接_C#_Visual Studio_Tfs_Visual Studio Addins - Fatal编程技术网

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

C# 在自定义生成工作流参数编辑器中获取TFS连接,c#,visual-studio,tfs,visual-studio-addins,C#,Visual Studio,Tfs,Visual Studio Addins,因此,我试图在自定义构建工作流参数编辑器中显示所有可用的TFS测试套件 现在,我可以使用.Net TFS API建立到TFS实例的连接,就像普通客户端应用程序一样。但是我必须在自定义程序集中嵌入TFS的URL,这是我希望避免的 这让我想到:这段代码在VisualStudio中运行,因此必须能够以某种方式获取有关当前TFS连接的信息。在搜索web之后,许多不同的站点显示了有关如何在普通VisualStudio扩展中执行此操作的代码。所以我把这样的东西放在一起: public overrid

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

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

这让我想到:这段代码在VisualStudio中运行,因此必须能够以某种方式获取有关当前TFS连接的信息。在搜索web之后,许多不同的站点显示了有关如何在普通VisualStudio扩展中执行此操作的代码。所以我把这样的东西放在一起:

    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);
var builddef = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition));
var tpc = builddef.BuildServer.TeamProjectCollection;
var tp = builddef.TeamProject;
我能够获取DTE对象,调用它的ToString()方法可以得到
系统。
但是当我尝试获取
TeamFoundationServerExt
对象时,我总是得到
null


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

因此,事实证明,您根本不必使用
DTE
之类的东西

您实际上可以获得如下所示的TFS连接:

    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);
var builddef = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition));
var tpc = builddef.BuildServer.TeamProjectCollection;
var tp = builddef.TeamProject;