【问题标题】:Visual Studio 2010 Not Recognizing proper Source Control Plug InVisual Studio 2010 无法识别正确的源代码管理插件
【发布时间】:2012-06-02 21:23:53
【问题描述】:

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

为了使用 Subversion,我安装了 AnkhSVN。 为了在 Git 上工作,我安装了 Git Source Control Provider 要在 TFS 上工作,……嗯,你明白了。

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

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

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

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

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

【问题讨论】:

  • Neither of these 有帮助吗?
  • 没有。第一个没有真正的解决方案(这个人只是消除了对解决方案的需求。)第二个,答案似乎是“确保源代码控制信息在解决方案中”。而且,正如我所说,确实如此。

标签: visual-studio-2010 version-control


【解决方案1】:

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

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

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

【讨论】:

  • 我很想在您发布后试用您的扩展程序。
  • 如何识别 TFS 存储库?我从来没有使用过它。
  • 您可能必须使用 TFS API。它不会将任何隐藏或特殊文件夹添加到您的目录结构中。
  • 扩展名为 published,完全支持 git、subversion 和 mercurial。
【解决方案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 窗口保持打开状态并显示奇怪的错误,但解决方案资源管理器中的上下文菜单确实会切换到正确的提供程序。

【讨论】:

  • 我知道,因为根据加载的源代码管理插件(AnkhSVN、Git)会出现不同的视觉效果(显示文件状态的图标覆盖、允许源代码管理操作的额外工具窗口等。 ..)
  • 额外的窗口不会自动为您打开或关闭——这些窗口是根据您上次关闭解决方案时打开的窗口打开/关闭的,与 SCC 提供程序无关。但是是的,解决方案资源管理器中的图标应该会自动更新。
  • 检查了我的 .sln 文件,没有 SubversionScc 的 GlobalSection,如上所述添加,现在 VS 将在我加载该解决方案时为我切换源代码控制选项。
【解决方案3】:

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

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

从您的问题和this question 看来,它在某种程度上被破坏了。

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

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

【讨论】:

  • 正如您所说,解决方案中持续存在的 SCC 绑定似乎存在,但已完全损坏。这也没有任何意义,因为该解决方案可能驻留在具有多个 RCS 系统的不同存储库中。我的extension 以不同的方式解决了这个问题:它检测到保留文件夹的存在并相应地加载正确的 SCC 提供程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2022-08-12
  • 1970-01-01
  • 2013-04-21
相关资源
最近更新 更多