diff --git a/src/GitHub.Exports/GitHub.Exports.csproj b/src/GitHub.Exports/GitHub.Exports.csproj
index ed40a1461e..0c5c674ca3 100644
--- a/src/GitHub.Exports/GitHub.Exports.csproj
+++ b/src/GitHub.Exports/GitHub.Exports.csproj
@@ -100,6 +100,7 @@
+
diff --git a/src/GitHub.Exports/Helpers/AssemblyResolver.cs b/src/GitHub.Exports/Helpers/AssemblyResolver.cs
new file mode 100644
index 0000000000..dca412f0a9
--- /dev/null
+++ b/src/GitHub.Exports/Helpers/AssemblyResolver.cs
@@ -0,0 +1,73 @@
+using GitHub.VisualStudio;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GitHub.Helpers
+{
+ public static class AssemblyResolver
+ {
+ static bool resolverInitialized;
+
+ // list of assemblies to be loaded from the extension installation path
+ static readonly string[] ourAssemblies =
+ {
+ "GitHub.Api",
+ "GitHub.App",
+ "GitHub.CredentialManagement",
+ "GitHub.Exports",
+ "GitHub.Exports.Reactive",
+ "GitHub.Extensions",
+ "GitHub.Extensions.Reactive",
+ "GitHub.UI",
+ "GitHub.UI.Reactive",
+ "GitHub.VisualStudio",
+ "GitHub.TeamFoundation",
+ "GitHub.TeamFoundation.14",
+ "GitHub.TeamFoundation.15",
+ "GitHub.VisualStudio.UI",
+ "System.Windows.Interactivity"
+ };
+
+ public static void InitializeAssemblyResolver()
+ {
+ if (resolverInitialized)
+ return;
+ AppDomain.CurrentDomain.AssemblyResolve += LoadAssemblyFromRunDir;
+ resolverInitialized = true;
+ }
+
+ [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods")]
+ static Assembly LoadAssemblyFromRunDir(object sender, ResolveEventArgs e)
+ {
+ try
+ {
+ var name = new AssemblyName(e.Name);
+ if (!ourAssemblies.Contains(name.Name))
+ return null;
+ var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ var filename = Path.Combine(path, name.Name + ".dll");
+ if (!File.Exists(filename))
+ return null;
+ return Assembly.LoadFrom(filename);
+ }
+ catch (Exception ex)
+ {
+ var log = string.Format(CultureInfo.CurrentCulture,
+ "Error occurred loading {0} from {1}.{2}{3}{4}",
+ e.Name,
+ Assembly.GetExecutingAssembly().Location,
+ Environment.NewLine,
+ ex,
+ Environment.NewLine);
+ VsOutputLogger.Write(log);
+ }
+ return null;
+ }
+ }
+}
diff --git a/src/GitHub.VisualStudio.UI/Helpers/SharedDictionaryManager.cs b/src/GitHub.VisualStudio.UI/Helpers/SharedDictionaryManager.cs
index fa73ac11e9..e60377d247 100644
--- a/src/GitHub.VisualStudio.UI/Helpers/SharedDictionaryManager.cs
+++ b/src/GitHub.VisualStudio.UI/Helpers/SharedDictionaryManager.cs
@@ -3,11 +3,17 @@
using System.Windows;
using Microsoft.VisualStudio.PlatformUI;
using GitHub.VisualStudio.Helpers;
+using GitHub.Helpers;
namespace GitHub.VisualStudio.UI.Helpers
{
public class SharedDictionaryManager : ResourceDictionary
{
+ static SharedDictionaryManager()
+ {
+ AssemblyResolver.InitializeAssemblyResolver();
+ }
+
public SharedDictionaryManager()
{
currentTheme = Colors.DetectTheme();
diff --git a/src/GitHub.VisualStudio/GitHubPackage.cs b/src/GitHub.VisualStudio/GitHubPackage.cs
index 4a4c72dc75..a41fe5b5c3 100644
--- a/src/GitHub.VisualStudio/GitHubPackage.cs
+++ b/src/GitHub.VisualStudio/GitHubPackage.cs
@@ -17,6 +17,7 @@
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Octokit;
+using GitHub.Helpers;
namespace GitHub.VisualStudio
{
@@ -32,32 +33,12 @@ namespace GitHub.VisualStudio
[ProvideOptionPage(typeof(OptionsPage), "GitHub for Visual Studio", "General", 0, 0, supportsAutomation: true)]
public class GitHubPackage : Package
{
- // list of assemblies to be loaded from the extension installation path
- static readonly string[] ourAssemblies =
- {
- "GitHub.Api",
- "GitHub.App",
- "GitHub.CredentialManagement",
- "GitHub.Exports",
- "GitHub.Exports.Reactive",
- "GitHub.Extensions",
- "GitHub.Extensions.Reactive",
- "GitHub.UI",
- "GitHub.UI.Reactive",
- "GitHub.VisualStudio",
- "GitHub.TeamFoundation",
- "GitHub.TeamFoundation.14",
- "GitHub.TeamFoundation.15",
- "GitHub.VisualStudio.UI",
- "System.Windows.Interactivity"
- };
readonly IServiceProvider serviceProvider;
- static bool resolverInitialized;
static GitHubPackage()
{
- InitializeAssemblyResolver();
+ AssemblyResolver.InitializeAssemblyResolver();
}
public GitHubPackage()
@@ -70,14 +51,6 @@ public GitHubPackage(IServiceProvider serviceProvider)
this.serviceProvider = serviceProvider;
}
- public static void InitializeAssemblyResolver()
- {
- if (resolverInitialized)
- return;
- AppDomain.CurrentDomain.AssemblyResolve += LoadAssemblyFromRunDir;
- resolverInitialized = true;
- }
-
protected override void Initialize()
{
base.Initialize();
@@ -91,34 +64,6 @@ protected override void Initialize()
serviceProvider.AddCommandHandler(menu.Guid, menu.CmdId, menu.CanShow, () => menu.Activate());
}
- [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Reliability", "CA2001:AvoidCallingProblematicMethods")]
- static Assembly LoadAssemblyFromRunDir(object sender, ResolveEventArgs e)
- {
- try
- {
- var name = new AssemblyName(e.Name);
- if (!ourAssemblies.Contains(name.Name))
- return null;
- var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- var filename = Path.Combine(path, name.Name + ".dll");
- if (!File.Exists(filename))
- return null;
- return Assembly.LoadFrom(filename);
- }
- catch (Exception ex)
- {
- var log = string.Format(CultureInfo.CurrentCulture,
- "Error occurred loading {0} from {1}.{2}{3}{4}",
- e.Name,
- Assembly.GetExecutingAssembly().Location,
- Environment.NewLine,
- ex,
- Environment.NewLine);
- VsOutputLogger.Write(log);
- }
- return null;
- }
-
void IncrementLaunchCount()
{
var usageTracker = serviceProvider.GetExportedValue();
diff --git a/src/GitHub.VisualStudio/Helpers/SharedDictionaryManager.cs b/src/GitHub.VisualStudio/Helpers/SharedDictionaryManager.cs
index 40a41467bd..0d621e240a 100644
--- a/src/GitHub.VisualStudio/Helpers/SharedDictionaryManager.cs
+++ b/src/GitHub.VisualStudio/Helpers/SharedDictionaryManager.cs
@@ -1,4 +1,5 @@
-using System;
+using GitHub.Helpers;
+using System;
using System.Collections.Generic;
using System.Windows;
@@ -8,7 +9,7 @@ public class SharedDictionaryManager : ResourceDictionary
{
static SharedDictionaryManager()
{
- GitHubPackage.InitializeAssemblyResolver();
+ AssemblyResolver.InitializeAssemblyResolver();
}
static readonly Dictionary resourceDicts = new Dictionary();