使用Mono.Cecil对目标.NET的DLL程序进行IL修改后保存时报“Failed to resolve assembly: ' xxxxxx, version=xxxxx,Culture=xxxxx,PublicKeyToken=xxxxxxx'"异常。spa
使用DNSPY进行调试,原来是由于修改的目标DLL和自己程序不在同一个目录,当须要用到目标DLL引用的DLL时Mono.Cecil只在自身所在的目录进行搜索匹配,调试
找不到对应的DLL文件就会报上面的异常信息。对象
解决方法有两种:blog
第一个:只要将对应的DLL拷贝到程序自身所在目录便可解决。ci
第二个:在程序里增长Mono.Cecil能够搜索的目标目录。it
DefaultAssemblyResolver resolver = new DefaultAssemblyResolver(); resolver.AddSearchDirectory(info.DirectoryName); // 增长目标目录 ReaderParameters parameters = new ReaderParameters() { AssemblyResolver = resolver, // 将增长好目标目录的对象做为参数给AssemblyResolver ReadSymbols = false, }; AssemblyDefinition asm = AssemblyDefinition.ReadAssembly(file, parameters); // 使用上面的参数便可完成对目标目录的指定及搜索