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



我是扩展Visual Studio的新手,我正试图找到当前解决方案使用的源代码控制系统。

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

内部OnAfterSolutionOpen(或可能是其他一些,如果有替代方案)我想采取不同的行动基于是否解决方案使用TFS或Git或其他东西。我如何获得这些信息?

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

好了,经过几个小时的挖掘,我找到了一个解决方案。感谢Mark Rendle的文章和他的NoGit扩展的源代码,我发现注册的源代码控制插件列表位于注册表:HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio12.0_ConfigSourceControlProviders(在VS 2013的情况下)。

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

var key = @"SoftwareMicrosoftVisualStudio" + "12.0" + @"_ConfigSourceControlProviders";
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);
}

现在,我发现有两种方法可以获得当前活动提供商的指南。

重要更新:显然,获取当前活动插件的第二种方式不像预期的那样工作。我强烈建议使用第一种解决方案。

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

    var getProvider = GetService(typeof(IVsRegisterScciProvider)) as IVsGetScciProviderInterface;
    Guid pGuid;
    getProvider.GetSourceControlProviderID(out pGuid);
    
  2. 或者我们可以直接去HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio12.0CurrentSourceControlProvider获取这个键的默认值:

    var key2 = @"SoftwareMicrosoftVisualStudio12.0CurrentSourceControlProvider";
    var guidString = (string)Microsoft.Win32.Registry.CurrentUser.OpenSubKey(key2).GetValue("");
    var currentGuid = Guid.Parse(guidString);
    

现在我们只取var activeProviderName = dict[currentGuid];,就这样。

相关内容

  • 没有找到相关文章

最新更新