Merge branch 'fix-dependent-dll-loading' of https://github.com/susu/Torch into staging
This commit is contained in:
@@ -233,17 +233,9 @@ namespace Torch.Managers
|
|||||||
|
|
||||||
foreach (var file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
if (!file.Contains(".dll", StringComparison.CurrentCultureIgnoreCase))
|
if (!file.EndsWith(".dll", StringComparison.CurrentCultureIgnoreCase))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (false)
|
|
||||||
{
|
|
||||||
var asm = Assembly.LoadFrom(file);
|
|
||||||
assemblies.Add(asm);
|
|
||||||
TorchBase.RegisterAuxAssembly(asm);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
using (var stream = File.OpenRead(file))
|
using (var stream = File.OpenRead(file))
|
||||||
{
|
{
|
||||||
var data = stream.ReadToEnd();
|
var data = stream.ReadToEnd();
|
||||||
@@ -261,15 +253,14 @@ namespace Torch.Managers
|
|||||||
{
|
{
|
||||||
_log.Warn(e, $"Failed to read debugging symbols from {symbolPath}");
|
_log.Warn(e, $"Failed to read debugging symbols from {symbolPath}");
|
||||||
}
|
}
|
||||||
Assembly asm = symbol != null ? Assembly.Load(data, symbol) : Assembly.Load(data);
|
assemblies.Add(symbol != null ? Assembly.Load(data, symbol) : Assembly.Load(data));
|
||||||
#else
|
#else
|
||||||
Assembly asm = Assembly.Load(data);
|
assemblies.Add(Assembly.Load(data));
|
||||||
#endif
|
#endif
|
||||||
assemblies.Add(asm);
|
|
||||||
TorchBase.RegisterAuxAssembly(asm);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RegisterAllAssemblies(assemblies);
|
||||||
InstantiatePlugin(manifest, assemblies);
|
InstantiatePlugin(manifest, assemblies);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,7 +279,7 @@ namespace Torch.Managers
|
|||||||
|
|
||||||
foreach (var entry in zipFile.Entries)
|
foreach (var entry in zipFile.Entries)
|
||||||
{
|
{
|
||||||
if (!entry.Name.Contains(".dll", StringComparison.CurrentCultureIgnoreCase))
|
if (!entry.Name.EndsWith(".dll", StringComparison.CurrentCultureIgnoreCase))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
||||||
@@ -309,19 +300,52 @@ namespace Torch.Managers
|
|||||||
{
|
{
|
||||||
_log.Warn(e, $"Failed to read debugging symbols from {path}:{symbolEntryName}");
|
_log.Warn(e, $"Failed to read debugging symbols from {path}:{symbolEntryName}");
|
||||||
}
|
}
|
||||||
Assembly asm = symbol != null ? Assembly.Load(data, symbol) : Assembly.Load(data);
|
assemblies.Add(symbol != null ? Assembly.Load(data, symbol) : Assembly.Load(data));
|
||||||
#else
|
#else
|
||||||
Assembly asm = Assembly.Load(data);
|
assemblies.Add(Assembly.Load(data));
|
||||||
#endif
|
#endif
|
||||||
assemblies.Add(asm);
|
|
||||||
TorchBase.RegisterAuxAssembly(asm);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RegisterAllAssemblies(assemblies);
|
||||||
InstantiatePlugin(manifest, assemblies);
|
InstantiatePlugin(manifest, assemblies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RegisterAllAssemblies(IReadOnlyCollection<Assembly> assemblies)
|
||||||
|
{
|
||||||
|
Assembly ResolveDependentAssembly(object sender, ResolveEventArgs args)
|
||||||
|
{
|
||||||
|
var requiredAssemblyName = new AssemblyName(args.Name);
|
||||||
|
foreach (Assembly asm in assemblies)
|
||||||
|
{
|
||||||
|
if (IsAssemblyCompatible(requiredAssemblyName, asm.GetName()))
|
||||||
|
return asm;
|
||||||
|
}
|
||||||
|
_log.Warn($"Could find dependent assembly! Requesting assembly: {args.RequestingAssembly}, dependent assembly: {requiredAssemblyName}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
AppDomain.CurrentDomain.AssemblyResolve += ResolveDependentAssembly;
|
||||||
|
foreach (Assembly asm in assemblies)
|
||||||
|
{
|
||||||
|
TorchBase.RegisterAuxAssembly(asm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
AppDomain.CurrentDomain.AssemblyResolve -= ResolveDependentAssembly;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsAssemblyCompatible(AssemblyName a, AssemblyName b)
|
||||||
|
{
|
||||||
|
return a.Name == b.Name && a.Version.Major == b.Version.Major && a.Version.Minor == b.Version.Minor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private PluginManifest GetManifestFromZip(string path)
|
private PluginManifest GetManifestFromZip(string path)
|
||||||
{
|
{
|
||||||
using (var zipFile = ZipFile.OpenRead(path))
|
using (var zipFile = ZipFile.OpenRead(path))
|
||||||
|
Reference in New Issue
Block a user