在 .Net Core 中加载程序集时解决依赖项

nun*_*esf 5 c# roslyn .net-core

我在 .net Core 中有一个项目,我需要将程序集(使用Roslyn编译)加载到沙箱中,以隔离代码执行。

我的第一个想法是使用AppDomain,但在 .net Core 中这是不可能的。因此,解决方案是使用AssemblyLoadContext

以下代码是我的程序集加载程序

public class AssemblyContext : AssemblyLoadContext
{
    public Assembly Load(Stream stream)
    {
        this.Resolving += ResolvingHandler;
        return this.LoadFromStream(stream);
    }

    public Assembly ResolvingHandler(AssemblyLoadContext context, AssemblyName assemblyName)
    {
        var assembly = context.LoadFromAssemblyName(assemblyName);
        Console.WriteLine("Resolving: " + assemblyName.FullName);
        return assembly;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是在加载Assembly 之后,没有调用Resolving方法并且没有加载依赖项,这使得我编译的代码无法正常工作。

是否有必要对调用ResolvingHandler做任何额外的步骤?或者这在 Core 中是不可能的?

小智 5

文档来看,它不是按设计调用的:

AssemblyLoadContext.Resolving 事件

当尝试加载到此程序集加载上下文时程序集解析失败时发生。