Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/GitHub.Exports/GitHub.Exports.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
<Compile Include="Factories\IUIFactory.cs" />
<Compile Include="Factories\IUIPair.cs" />
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="Helpers\AssemblyResolver.cs" />
<Compile Include="Helpers\INotifyPropertySource.cs" />
<Compile Include="Extensions\PropertyNotifierExtensions.cs" />
<Compile Include="Extensions\SimpleRepositoryModelExtensions.cs" />
Expand Down
73 changes: 73 additions & 0 deletions src/GitHub.Exports/Helpers/AssemblyResolver.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
6 changes: 6 additions & 0 deletions src/GitHub.VisualStudio.UI/Helpers/SharedDictionaryManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
59 changes: 2 additions & 57 deletions src/GitHub.VisualStudio/GitHubPackage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Octokit;
using GitHub.Helpers;

namespace GitHub.VisualStudio
{
Expand All @@ -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()
Expand All @@ -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();
Expand All @@ -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<IUsageTracker>();
Expand Down
5 changes: 3 additions & 2 deletions src/GitHub.VisualStudio/Helpers/SharedDictionaryManager.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using GitHub.Helpers;
using System;
using System.Collections.Generic;
using System.Windows;

Expand All @@ -8,7 +9,7 @@ public class SharedDictionaryManager : ResourceDictionary
{
static SharedDictionaryManager()
{
GitHubPackage.InitializeAssemblyResolver();
AssemblyResolver.InitializeAssemblyResolver();
}

static readonly Dictionary<Uri, ResourceDictionary> resourceDicts = new Dictionary<Uri, ResourceDictionary>();
Expand Down