所以,我试图在自定义构建工作流参数编辑器中显示所有可用的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
为什么这不起作用的任何提示?
答案 0 :(得分:0)
因此,事实证明,您根本不必使用DTE
内容。
你实际上可以像这样得到TFS连接:
var builddef = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition));
var tpc = builddef.BuildServer.TeamProjectCollection;
var tp = builddef.TeamProject;