• Mono.Cecil 修改目标.NET的IL代码保存时报异常的处理。


    使用Mono.Cecil对目标.NET的DLL程序进行IL修改后保存时报“Failed to resolve assembly: ' xxxxxx, version=xxxxx,Culture=xxxxx,PublicKeyToken=xxxxxxx'"异常。

    使用DNSPY进行调试,原来是因为修改的目标DLL和本身程序不在同一个目录,当需要用到目标DLL引用的DLL时Mono.Cecil只在自身所在的目录进行搜索匹配,

    找不到对应的DLL文件就会报上面的异常信息。

    解决方法有两种:

    第一个:只要将对应的DLL拷贝到程序自身所在目录即可解决。

    第二个:在程序里增加Mono.Cecil可以搜索的目标目录。

                DefaultAssemblyResolver resolver = new DefaultAssemblyResolver();
                resolver.AddSearchDirectory(info.DirectoryName); // 增加目标目录  
    
                ReaderParameters parameters = new ReaderParameters()
                {
                    AssemblyResolver = resolver, // 将增加好目标目录的对象作为参数给AssemblyResolver
                    ReadSymbols = false,
                };
                
                AssemblyDefinition asm = AssemblyDefinition.ReadAssembly(file, parameters); // 使用上面的参数即可完成对目标目录的指定及搜索
    

      

  • 相关阅读:
    10.17 作业
    10.12 classmethod,staticmethod,反射,魔法方法
    10.11 组合,封装,多态
    10.11 作业
    day20 作业
    10.10 类的继承,继承关系,派生,新式类,经典类
    10.9 类,对象,查找顺序,对象绑定方法
    day 55小结
    day 54小结
    day 53小结
  • 原文地址:https://www.cnblogs.com/leeairw/p/7075029.html
Copyright © 2020-2023  润新知