Visual studio 2010 Visual Studio 2010无法识别正确的源代码管理插件

Visual studio 2010 Visual Studio 2010无法识别正确的源代码管理插件,visual-studio-2010,version-control,Visual Studio 2010,Version Control,我在使用不同源代码管理提供程序的不同项目上工作。Subversion、Git、TFS等 为了处理Subversion,我安装了AnkhSVN。 为了使用Git,我安装了Git源代码管理提供程序 要在TFS上工作,…好吧,你明白了 源代码管理信息保存为解决方案文件的一部分 然而,当我打开一个新项目时,VisualStudio总是使用最后选择的源代码管理提供程序。它似乎没有从解决方案文件中提取它。我总是要打开“工具”>“选项”对话框来切换提供程序(这需要花费很长时间!) 这是不是我做错了什么?我希望

我在使用不同源代码管理提供程序的不同项目上工作。Subversion、Git、TFS等

为了处理Subversion,我安装了AnkhSVN。 为了使用Git,我安装了Git源代码管理提供程序 要在TFS上工作,…好吧,你明白了

源代码管理信息保存为解决方案文件的一部分

然而,当我打开一个新项目时,VisualStudio总是使用最后选择的源代码管理提供程序。它似乎没有从解决方案文件中提取它。我总是要打开“工具”>“选项”对话框来切换提供程序(这需要花费很长时间!)

这是不是我做错了什么?我希望VisualStudio根据开放的解决方案更改提供者

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


我不敢相信以前没有人问过这个问题,但在StackOverflow的“可能已经有你的答案的问题”列表中,我没有看到任何明显的重复。遗憾的是,这似乎指向了“只有我”的答案。Visual Studio肯定支持这一点。源代码控制提供程序应该向解决方案文件持久化某种信息,包括它是哪个提供程序以及它使用的是哪个绑定(如果有必要——我认为VSS和TFS使用这个)

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

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

您可能需要编写一个宏来执行此操作。这并不特别困难。您需要钩住接口。我不确定您将如何访问已配置的源代码管理提供程序。开始


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

这不是一个真正的答案,但这太大了,无法放在评论中:

我不想说“对我有用”,但事实上,它确实对我有用。我只使用AnkhSVN和TFS客户端,但VisualStudio会根据我打开的解决方案在两者之间切换。所以你所要求的肯定是对工作的“支持”。也许其他插件提供商中有一个有问题

您是否已打开解决方案文件并确认存在源代码管理信息?应该是这样的:

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
GlobalSection(SubversionScc)=预解
Svn Managed=True
Manager=AnkhSVN-对VisualStudio的Subversion支持
端球切面
全局分区(TeamFoundationVersionControl)=预解
SccNumberOfProjects=5
SccEnterpriseProvider={4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer=http://XXXXX:8080/tfs/XXXXX
SCCProjectionQuename0=。。。
SccProjectName0=。。。
SccLocalPath0=。。。
端球切面

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

每个解决方案提供程序绑定是错误的,因为解决方案可能驻留在多个源代码管理系统中。诀窍是在VS扩展的预加载解决方案事件中加载适当的源代码管理提供程序来检查保留目录。核心代码如下所示:

IVsRegisterScciProvider vsRegisterScciProvider=GetService();
RegisterSourceControlProvider(sccProviderGuid);

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

的帮助?没有。第一个文档没有真正的解决方案(该人刚刚消除了对解决方案的需求)。第二个文档的答案似乎是“确保源代码管理信息在解决方案中。”并且,正如我所说的,是的。我知道,因为根据加载的源代码管理插件(AnkhSVN,Git),会出现不同的视觉效果(显示文件状态的图标覆盖、允许源代码管理操作的额外工具窗口等)额外的窗口不会自动为您打开或关闭——这些窗口是根据您上次关闭解决方案时打开的窗口打开/关闭的,与SCC提供程序无关。但是是的,解决方案资源管理器中的图标应该会自动更新。检查了我的.sln文件,没有SubversionScc的GlobalSection,如上所述添加了它,现在VS将在我加载该解决方案时为我切换源代码管理选项。一旦发布了该扩展,我很想尝试一下。我如何识别TFS repo?我从未使用过它。您可能必须使用TFSAPI。它不会将任何隐藏的或特殊的文件夹添加到您的目录结构中。该扩展完全支持git、subversion和mercurial。正如您所说,解决方案中持久化的SCC绑定似乎存在,但完全被破坏。此外,这也没有意义,因为解决方案可能驻留在具有多个RCS系统的不同存储库中。My以另一种方式解决问题:它检测保留文件夹的存在,并相应地加载正确的SCC提供程序。