因此,在Visual Studio扩展中,当按下菜单项时,我想检查团队资源管理器中的当前页面是什么。
所以,首先我得到ITeamExplorer对象:
ITeamExplorer teamExplorer = (ITeamExplorer)this.GetService(typeof(ITeamExplorer)).
接下来,我想确保我处于待定更改页面。
if(teamExplorer != null)
{
if(teamExplorer.currentPage is ???)
{
//Do stuff.
}
}
现在,如果我在调试中运行它(注释掉最后一个if部分以便它编译,打开团队资源管理器到挂起的更改页面,并在我获得ITeamExplorer对象后中断,我可以检查它并看到当前页面的类型为Microsoft.VisualStudio.TeamFoundation.VersionControl.PendingChanges.PendingChangesPageVS
。
但我找不到任何可以让我实际比较类型的参考,以确保页面属于同一类型。
Microsoft.VisualStudio
有效。 Microsoft.TeamFoundation
有效。但是没有Microsoft.VisualStudio.TeamFoundation
。我检查过参考文献,看看是否忘记包含它,但它也不存在。
它隐藏在其他地方吗?在nuget包中?也许在我需要安装的Team Foundation Server SDK中?
在C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PrivateAssemblies中找到dll。猜猜我需要看看引用私人程序集需要什么。
将该DLL复制到C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ ReferenceAssemblies \ v4.5允许我引用它。但我觉得我在做一些我不应该做的事情。
答案 0 :(得分:4)
所以,根据我的回答,我找到了参考资料。我将Microsoft.VisualStudio.TeamFoundation.VersionControl从C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
复制到C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v4.5
,我可以引用它。我可能也可以通过浏览到C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
来包含dll。
话虽这么说,我想要的课程是内部的,所以没有帮助。相反,我做了一些更容易的事情,不需要dll。我刚刚使用teamExplorer.CurrentPage.GetType().ToString()
并将其与比较我期望的类名{({1}})的字符串进行了比较。
答案 1 :(得分:0)
仅供参考-
对于VS 2015,可以通过导航到C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TeamFoundation \ Team Explorer来找到其位置。如果转到那里,然后转到一个目录,则将看到Team Explorer是到C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ Extensions \ ftq4t4pd.guv的符号链接。因此,这就像不是将DLL随产品一起交付时,而是将其交付给扩展程序,并且每当扩展程序更新时,它们都会更新该符号链接以指向它。很奇怪。
对于VS 2017,您可以通过导航到C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TeamFoundation \ Team Explorer来找到它,用任何方式替换“ Professional”您已安装的版本。似乎VS 2017并没有发生符号链接问题。