Skip to content

Commit 3637961

Browse files
committed
Fix Shared Assembly Issue
1 parent 16e032e commit 3637961

File tree

1 file changed

+8
-28
lines changed

1 file changed

+8
-28
lines changed

Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,57 +11,37 @@ namespace Flow.Launcher.Core.Plugin
1111
{
1212
internal class PluginAssemblyLoader : AssemblyLoadContext
1313
{
14-
private readonly AssemblyDependencyResolver dependencyResolver;
14+
private readonly AssemblyDependencyResolver _dependencyResolver;
1515

16-
private readonly AssemblyName assemblyName;
17-
18-
private static readonly ConcurrentDictionary<string, byte> loadedAssembly;
19-
20-
static PluginAssemblyLoader()
21-
{
22-
var currentAssemblies = AppDomain.CurrentDomain.GetAssemblies();
23-
loadedAssembly = new ConcurrentDictionary<string, byte>(
24-
currentAssemblies.Select(x => new KeyValuePair<string, byte>(x.FullName, default)));
25-
26-
AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
27-
{
28-
loadedAssembly[args.LoadedAssembly.FullName] = default;
29-
};
30-
}
16+
private readonly AssemblyName _assemblyName;
3117

3218
internal PluginAssemblyLoader(string assemblyFilePath)
3319
{
34-
dependencyResolver = new AssemblyDependencyResolver(assemblyFilePath);
35-
assemblyName = new AssemblyName(Path.GetFileNameWithoutExtension(assemblyFilePath));
20+
_dependencyResolver = new AssemblyDependencyResolver(assemblyFilePath);
21+
_assemblyName = new AssemblyName(Path.GetFileNameWithoutExtension(assemblyFilePath));
3622
}
3723

3824
internal Assembly LoadAssemblyAndDependencies()
3925
{
40-
return LoadFromAssemblyName(assemblyName);
26+
return LoadFromAssemblyName(_assemblyName);
4127
}
4228

4329
protected override Assembly Load(AssemblyName assemblyName)
4430
{
45-
string assemblyPath = dependencyResolver.ResolveAssemblyToPath(assemblyName);
31+
string assemblyPath = _dependencyResolver.ResolveAssemblyToPath(assemblyName);
4632

4733
// When resolving dependencies, ignore assembly depenedencies that already exits with Flow.Launcher
4834
// Otherwise duplicate assembly will be loaded and some weird behavior will occur, such as WinRT.Runtime.dll
4935
// will fail due to loading multiple versions in process, each with their own static instance of registration state
50-
if (assemblyPath == null || ExistsInReferencedPackage(assemblyName))
51-
return null;
36+
var existAssembly = Default.Assemblies.FirstOrDefault(x => x.FullName == assemblyName.FullName);
5237

53-
return LoadFromAssemblyPath(assemblyPath);
38+
return existAssembly ?? (assemblyPath == null ? null : LoadFromAssemblyPath(assemblyPath));
5439
}
5540

5641
internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type)
5742
{
5843
var allTypes = assembly.ExportedTypes;
5944
return allTypes.First(o => o.IsClass && !o.IsAbstract && o.GetInterfaces().Any(t => t == type));
6045
}
61-
62-
internal bool ExistsInReferencedPackage(AssemblyName assemblyName)
63-
{
64-
return loadedAssembly.ContainsKey(assemblyName.FullName);
65-
}
6646
}
6747
}

0 commit comments

Comments
 (0)