Mono Cecil добавить недостающую сборку


По какой-то причине, когда я пытаюсь загрузить какую-то сборку и проанализировать ее, я получаю ошибку Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly...

Меня на самом деле не волнует, почему это исключение бросает, Я знаю, где находится недостающая сборка.

Есть способ получить что-то вроде AppDomain.CurrentDomain.AssemblyResolve события, но для моно.Сесил? Я могу вручную загрузить недостающую сборку, но не знаю, как это сделать.
Итак, как я могу загрузить сборку для Mono.Сесил?

1 2

1 ответ:

По-Видимому, Моно.Сесил это поддерживает. Когда вы загружаете сборку с AssemblyDefinition.ReadAssembly внутри ReadParameters, Вы можете изменить свойство AssemblyResolver на свой резольвер.

Для создания решателя просто наследовать от BaseAssemblyResolver Как:

private class CustomResolver : BaseAssemblyResolver
{
    private DefaultAssemblyResolver _defaultResolver;

    public Resolver(string sourceDir)
    {
        _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;
    }
}