gpt4 book ai didi

c# - 如何在 VSPackage 中找到解决方案使用的版本控制系统

转载 作者:行者123 更新时间:2023-11-30 15:28:57 33 4
gpt4 key购买 nike

我是扩展 Visual Studio 的新手,我正在尝试寻找方法来查找当前解决方案使用的源代码控制系统。

我创建了 VsPackage 项目,我能够通过 IVsSolution 获取对解决方案的引用,并通过 IVsSolutionEvents 连接到解决方案事件。

OnAfterSolutionOpen 内部(或者如果有替代方案,可能还有其他一些)我想根据解决方案是使用 TFS 还是 Git 或其他东西来采取不同的行动。我怎样才能获得这些信息?

我计划支持尽可能多的 Visual Studio 版本,但如果不可能,我希望至少支持 VS2012 及更高版本。

最佳答案

好的,经过几个小时的挖掘,我找到了解决方案。感谢article Mark Rendle 和他的源代码 NoGit extension我发现,已注册的源代码控制插件列表位于注册表中:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\SourceControlProviders(如果是 VS 2013)。

所以现在,我们可以同时拥有插件 guid 和提供程序的名称。此示例代码可以获取这些值:

var key = @"Software\Microsoft\VisualStudio\" + "12.0" + @"_Config\SourceControlProviders";

var subkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(key);
var providerNames = subkey.GetSubKeyNames().Dump();
var dict = new Dictionary<Guid, String>();
foreach (var provGuidString in subkey.GetSubKeyNames())
{
var provName = (string)subkey.OpenSubKey(provGuidString).GetValue("");
dict.Add(Guid.Parse(provGuidString), provName);
}

现在,我发现有两种方法可以获取当前事件提供者的 guid。

重要更新:显然,获取当前事件插件的第二种方式无法按预期工作。我强烈建议使用第一种解决方案。

  1. 这是基于前面提到的扩展的方式:

    var getProvider = GetService(typeof(IVsRegisterScciProvider)) as IVsGetScciProviderInterface;
    Guid pGuid;
    getProvider.GetSourceControlProviderID(out pGuid);
  2. 或者我们可以转到 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\CurrentSourceControlProvider 并获取此键的默认值:

    var key2 = @"Software\Microsoft\VisualStudio\12.0\CurrentSourceControlProvider";
    var guidString = (string)Microsoft.Win32.Registry.CurrentUser.OpenSubKey(key2).GetValue("");
    var currentGuid = Guid.Parse(guidString);

现在我们只需要 var activeProviderName = dict[currentGuid]; 就可以了。

关于c# - 如何在 VSPackage 中找到解决方案使用的版本控制系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639591/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com