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

时间:2017-11-14 09:10:34

标签: c# .net-core roslyn

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

我的第一次尝试是使用 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;
    }
}

我的问题是在加载程序集之后,没有调用 Resolving 方法并且没有加载依赖项,这使得我的编译代码无效。

是否需要执行 ResolvingHandler 的任何其他步骤? 或者这在核心中是不可能的?

1 个答案:

答案 0 :(得分:1)

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

  

AssemblyLoadContext.Resolving事件

     

在尝试加载到该程序集加载上下文中时,程序集的解析失败 时发生。