在 .NET Core 中加载程序集时解决依赖问题

问题描述 投票:0回答:1

我在 .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方法并且未加载依赖项,使得我编译的代码无法工作。

是否需要执行任何额外步骤来调用 ResolvingHandler? 或者这在 .NET Core 中不可能做到?

c# .net-core roslyn
1个回答
5
投票

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

AssemblyLoadContext.Resolving 事件

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

© www.soinside.com 2019 - 2024. All rights reserved.