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 @@
+