因此,在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 包中? 也许在我需要安装的团队基础服务器 SDK 中?
编辑 1:
在 C:\Program Files (x86(\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies 中找到了 dll。 猜猜我需要看看引用私有程序集需要什么。
编辑2:
将该 dll 复制到 C:\Program Files (x86(\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v4.5 中允许我引用它。 但我觉得我正在做一些我不应该做的事情。
所以,从我的回答中,我找到了参考。 我将Microsoft.VisualStudio.TeamFoundation.VersionControl从C:Program Files (x86)Microsoft Visual Studio 12.0Common7IDEPrivateAssemblies
复制到C:Program Files (x86)Microsoft Visual Studio 12.0Common7IDEReferenceAssembliesv4.5
,我可以引用它。 我可能也可以通过浏览到 C:Program Files (x86)Microsoft Visual Studio 12.0Common7IDEPrivateAssemblies
来包含 dll。
话虽如此,我想要的课程是内部的,所以这没有帮助。 相反,我做了一些不需要dll的简单得多的事情。 我只是使用了teamExplorer.CurrentPage.GetType().ToString()
并将其与比较我预期的类名("Microsoft.VisualStudio.TeamFoundation.VersionControl.PendingChanges.PendingChangesPageVS"
(的字符串进行了比较
仅供参考 -
对于VS 2015,您可以通过导航到C:\Program Files (x86(\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\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似乎没有符号链接的事情发生。