【发布时间】:2018-04-27 03:48:09
【问题描述】:
我在 .net Core 中有一个项目,我需要将 Assembly(使用 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;
}
}
我这里的问题是Assembly加载后,Resolving方法没有被调用,依赖也没有被加载,导致我编译的代码不工作。 p>
是否有必要为调用ResolvingHandler做任何额外的步骤? 或者这在 Core 中是不可能的?
【问题讨论】:
-
我强烈建议您查看本文Resolving Assemblies in .NET Core 中详细介绍的程序集解析器
-
看看这个问题有很多答案:stackoverflow.com/questions/37895278/…