diff --git a/src/GitHub.Exports/GitHub.Exports.csproj b/src/GitHub.Exports/GitHub.Exports.csproj index 4d943d3e79..a3f42a1c92 100644 --- a/src/GitHub.Exports/GitHub.Exports.csproj +++ b/src/GitHub.Exports/GitHub.Exports.csproj @@ -63,6 +63,10 @@ ..\..\packages\Microsoft.VisualStudio.ComponentModelHost.14.0.25424\lib\net45\Microsoft.VisualStudio.ComponentModelHost.dll True + + ..\..\packages\Microsoft.VisualStudio.Setup.Configuration.Interop.1.15.103\lib\net35\Microsoft.VisualStudio.Setup.Configuration.Interop.dll + True + ..\..\packages\Microsoft.VisualStudio.Shell.14.0.14.3.25407\lib\Microsoft.VisualStudio.Shell.14.0.dll True diff --git a/src/GitHub.Exports/Services/VSServices.cs b/src/GitHub.Exports/Services/VSServices.cs index 39f13da5a8..4b580a5eaf 100644 --- a/src/GitHub.Exports/Services/VSServices.cs +++ b/src/GitHub.Exports/Services/VSServices.cs @@ -1,11 +1,15 @@ using System; using System.ComponentModel.Composition; +using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; +using System.Text.RegularExpressions; using GitHub.Logging; using GitHub.VisualStudio; using Microsoft.VisualStudio; +using Microsoft.VisualStudio.Setup.Configuration; +using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using Rothko; using Serilog; @@ -145,22 +149,28 @@ void TryCleanupSolutionUserFiles(IOperatingSystem os, string repoPath, string sl const string RegistryRootKey = @"Software\Microsoft\VisualStudio"; const string EnvVersionKey = "EnvVersion"; + const string InstallationNamePrefix = "VisualStudio/"; string GetVSVersion() { var version = typeof(Microsoft.VisualStudio.Shell.ActivityLog).Assembly.GetName().Version; var keyPath = String.Format(CultureInfo.InvariantCulture, "{0}\\{1}.{2}_Config\\SplashInfo", RegistryRootKey, version.Major, version.Minor); try { - using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(keyPath)) + if (version.Major == 14) { - var value = (string)key.GetValue(EnvVersionKey, String.Empty); - if (!String.IsNullOrEmpty(value)) - return value; + using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(keyPath)) + { + var value = (string)key.GetValue(EnvVersionKey, String.Empty); + if (!String.IsNullOrEmpty(value)) + return value; + } + } + else + { + var setupConfiguration = new SetupConfiguration(); + var setupInstance = setupConfiguration.GetInstanceForCurrentProcess(); + return setupInstance.GetInstallationName().TrimPrefix(InstallationNamePrefix); } - // fallback to poking the CommonIDE assembly, which most closely follows the advertised version. - var asm = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.FullName.StartsWith("Microsoft.VisualStudio.CommonIDE", StringComparison.OrdinalIgnoreCase)); - if (asm != null) - return asm.GetName().Version.ToString(); } catch(Exception ex) { diff --git a/src/GitHub.Exports/packages.config b/src/GitHub.Exports/packages.config index 62013fe6f2..890f5b20cd 100644 --- a/src/GitHub.Exports/packages.config +++ b/src/GitHub.Exports/packages.config @@ -4,6 +4,7 @@ +