ok now it works

This commit is contained in:
zznty
2024-10-22 21:11:33 +07:00
parent 8f7fef8857
commit bf3eaedf62
46 changed files with 1150 additions and 244 deletions

View File

@@ -1,19 +1,18 @@
using System.Reflection;
using System.Runtime.Loader;
using CringeBootstrap.Abstractions;
using SharedCringe.Loader;
namespace CringePlugins.Loader;
internal class PluginAssemblyLoadContext : AssemblyLoadContext
internal class PluginAssemblyLoadContext : DerivedAssemblyLoadContext
{
private readonly ICoreLoadContext _parentContext;
private readonly string _entrypointPath;
private readonly AssemblyDependencyResolver _dependencyResolver;
private Assembly? _assembly;
internal PluginAssemblyLoadContext(ICoreLoadContext parentContext, string entrypointPath) : base($"Plugin Context {Path.GetFileNameWithoutExtension(entrypointPath)}", true)
internal PluginAssemblyLoadContext(ICoreLoadContext parentContext, string entrypointPath) : base(parentContext, $"Plugin Context {Path.GetFileNameWithoutExtension(entrypointPath)}")
{
_parentContext = parentContext;
_entrypointPath = entrypointPath;
_dependencyResolver = new(entrypointPath);
}
@@ -25,7 +24,7 @@ internal class PluginAssemblyLoadContext : AssemblyLoadContext
if (_dependencyResolver.ResolveAssemblyToPath(assemblyName) is { } path)
return LoadFromAssemblyPath(path);
return _parentContext.ResolveFromAssemblyName(assemblyName);
return base.Load(assemblyName);
}
protected override nint LoadUnmanagedDll(string unmanagedDllName)
@@ -33,6 +32,6 @@ internal class PluginAssemblyLoadContext : AssemblyLoadContext
if (_dependencyResolver.ResolveUnmanagedDllToPath(unmanagedDllName) is { } path)
return LoadUnmanagedDllFromPath(path);
return _parentContext.ResolveUnmanagedDll(unmanagedDllName);
return base.LoadUnmanagedDll(unmanagedDllName);
}
}