我在.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/