我处理使用不同源控制提供程序的不同项目。 Subversion,Git,TFS等......
为了处理Subversion,我安装了AnkhSVN。 为了使用Git,我安装了Git源代码控制提供程序 为了研究TFS,......好吧,你明白了。
源控制信息保存为解决方案文件的一部分。
然而,总是,当我打开一个新项目时,Visual Studio会继续使用所选择的最后一个源控件提供程序。它似乎没有从解决方案文件中提取它。我总是要打开工具>用于切换提供者的选项对话框(需要FOREVER!)
这是我做错了吗?我希望Visual Studio能够根据打开的解决方案更改提供程序。
如果这是Visual Studio根本不做的事情,那么是否有宏或扩展会自动解决这个问题?
我无法相信之前没有问过这个问题,但我没有在StackOverflow列表中看到任何可能已经有你答案的问题。遗憾的是,这似乎指向了“这只是我。”的答案。
答案 0 :(得分:7)
每个解决方案提供程序绑定是IMO,因为解决方案可以驻留在多个源控制系统中。诀窍是在VS扩展的预加载解决方案事件中加载正确的源控制提供程序检查保留目录。核心代码如下:
IVsRegisterScciProvider vsRegisterScciProvider = GetService<IVsRegisterScciProvider>();
vsRegisterScciProvider.RegisterSourceControlProvider(sccProviderGuid);
此类扩展程序的完整代码为here。我可能会在经过一些测试后不久发布它,因为它非常简单,即使它需要我进行大量研究。我无法找到类似的东西,这对我来说很奇怪,因为它应该是这样做的好方法。关于RegisterSourceControlProvider
的文档也极具误导性,这可能就是原因。
答案 1 :(得分: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窗口保持打开状态并显示出错误,但解决方案资源管理器中的上下文菜单确实会切换到正确的提供程序。
答案 2 :(得分:1)
Visual Studio肯定支持这一点。源代码控制提供程序应该在解决方案文件中保留某种信息,告知它是哪个提供程序以及它使用哪种绑定(如果需要,我认为VSS和TFS使用它)。
当VS加载解决方案时,它应该选择正确的提供程序。
从您的问题和this question看来,它在某种程度上被打破了。
您可能必须编写一个宏来执行此操作。这并不是特别困难。您需要挂钩SolutionEvents接口。我不确定你是如何进入已配置的源代码管理提供程序的。开始here。
然而,尽管如此, 应该可行。我会尝试禁用除两个插件之外的所有插件,看看它是否正常工作。我所得到的可能是其中一个提供商在解决方案加载期间抛出异常而VS正在放弃其他提供商。