Search code examples
c#.net.net-assemblymono.cecil

Mono Cecil add missing assembly


For some reason when I try to load some assembly and analyze it, I'm getting error Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly...

I don't really care about why this exception throw, I know where is the missing assembly.

There is a way to some something like AppDomain.CurrentDomain.AssemblyResolve event but for Mono.Cecil? I can manually load the missing assembly but I don't know how.
So, how can I load an assembly for Mono.Cecil?


Solution

  • Apparently Mono.Cecil support that. When you load the Assembly with AssemblyDefinition.ReadAssembly inside the ReadParameters you can change the AssemblyResolver property to your resolver.

    To create a resolver just inherit from BaseAssemblyResolver like:

    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;
        }
    }