16

我从事使用不同源代码控制提供程序的不同项目。颠覆、Git、TFS 等...

为了在 Subversion 上工作,我安装了 AnkhSVN。为了在 Git 上工作,我安装了 Git 源代码控制提供程序。为了在 TFS 上工作,……嗯,你明白了。

源代码控制信息保存为解决方案文件的一部分。

然而,当我打开一个新项目时,Visual Studio 总是使用最后选择的源代码控制提供程序。它似乎没有从解决方案文件中提取出来。我总是必须打开“工具”>“选项”对话框来切换提供者(这需要永远!)

这是我做错了什么吗?我希望 Visual Studio 能够根据开放的解决方案更改提供程序。

如果这是 Visual Studio 根本不做的事情,是否有一个宏或扩展可以自动解决这个问题?

我不敢相信这个问题以前没有被问过,但我在 StackOverflow 的“可能已经有你答案的问题”列表中没有看到任何明显的欺骗。可悲的是,这似乎指向了“这只是我”的答案。

4

3 回答 3

7

IMO 的每个解决方案提供商绑定是错误的,因为该解决方案可以驻留在多个源代码控制系统中。诀窍是在 VS 扩展的预加载解决方案事件中加载正确的源代码控制提供程序检查保留目录。核心代码如下:

IVsRegisterScciProvider vsRegisterScciProvider = GetService<IVsRegisterScciProvider>();
vsRegisterScciProvider.RegisterSourceControlProvider(sccProviderGuid);

这种扩展的完整代码在这里。我可能会在一些测试后不久发布它,因为它非常简单,即使它需要我进行大量研究。我找不到任何类似的东西,这对我来说很奇怪,因为它应该是这样做的明显方式。关于的文档RegisterSourceControlProvider也极具误导性,因此这可能是原因。

于 2014-06-19T22:29:16.200 回答
2

不是真正的答案,但这太大而无法发表评论:

我讨厌说“对我有用”,但实际上它确实对我有用。我只使用 AnkhSVN 和 TFS 客户端,但 Visual Studio 会根据我打开的解决方案在两者之间切换。因此,您所要求的绝对是工作的“支持”。也许其他插件提供商之一有问题?

您是否打开了解决方案文件并确认存在源代码管理信息?它应该如下所示:

GlobalSection(SubversionScc) = preSolution
    Svn-Managed = True
    Manager = AnkhSVN - Subversion Support for Visual Studio
EndGlobalSection

GlobalSection(TeamFoundationVersionControl) = preSolution
    SccNumberOfProjects = 5
    SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
    SccTeamFoundationServer = http://XXXXX:8080/tfs/XXXXX
    SccProjectUniqueName0 = ...
    SccProjectName0 = ...
    SccLocalPath0 = ...
    <etc>
EndGlobalSection

此外,当您打开一个合适的解决方案时,您会得到什么迹象表明它没有切换供应商?您是否收到错误消息,或者您的项目似乎没有绑定到源代码管理?特别是,当我打开 SVN 解决方案时,我的 TFS 窗口保持打开状态并显示奇怪的错误,但解决方案资源管理器中的上下文菜单确实切换到正确的提供程序。

于 2012-05-30T19:22:19.490 回答
1

Visual Studio 绝对支持这一点。源代码控制提供程序应将某种信息持久保存到解决方案文件中,说明它是哪个提供程序以及它正在使用哪些绑定(如果需要——我认为 VSS 和 TFS 使用它)。

当 VS 加载解决方案时,它应该选择正确的提供程序。

从你的问题来看,从这个问题来看,它在某种程度上被打破了。

您可能必须编写一个宏来执行此操作。这不是特别困难。您需要挂钩SolutionEvents接口。我不确定您如何访问已配置的源代码控制提供程序。从这里开始。

尽管如此,它应该可以工作。我会尝试禁用除两个插件之外的所有插件,看看它是否正常工作。我要说的是,也许其中一个提供商在解决方案加载期间抛出了异常,而 VS 正在放弃其他提供商。

于 2012-05-30T19:13:44.607 回答