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

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

以下代码是我的Assembly Loader:

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;
    }
}

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

是否有必要对ResolvingHandler进行任何其他步骤?
还是在Core中无法做到这一点?

最佳答案

documentation开始,它不是按设计调用的:

关于c# - 在.Net Core中加载程序集时解决依赖性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47281663/

10-10 10:43