Mono Cecil 添加缺失的程序集

6

由于某种原因,当我尝试加载一些程序集并分析它时,我会收到错误提示:Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly...

我不关心为什么会出现这个异常,我知道缺少的程序集在哪里。

有没有类似于AppDomain.CurrentDomain.AssemblyResolve事件的方法,但适用于Mono.Cecil? 我可以手动加载缺失的程序集,但我不知道该怎么做。
那么,如何为Mono.Cecil加载程序集?

2个回答

9

显然,Mono.Cecil支持这一点。当你使用AssemblyDefinition.ReadAssemblyReadParameters中加载程序集时,你可以将AssemblyResolver属性更改为你的解析器。

要创建一个解析器,只需继承BaseAssemblyResolver,如下所示:

private class CustomResolver : BaseAssemblyResolver
{
    private DefaultAssemblyResolver _defaultResolver;

    public CustomResolver()
    {
        _defaultResolver = new DefaultAssemblyResolver();
    }

    public override AssemblyDefinition Resolve(AssemblyNameReference name)
    {
        AssemblyDefinition assembly;
        try
        {
            assembly = _defaultResolver.Resolve(name);
        }
        catch (AssemblyResolutionException ex)
        {
             assembly = ...; // Your resolve logic   
        }
        return assembly;
    }
}

2

是的,这对我有用。 我创建了一个新的 ASP.NET Core 3.1 Azure Functions 项目。 这是我的第一个错误。 添加该软件包已为我解决了问题。 谢谢! - ganders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接