使用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); // 使用上面的參數便可完成對目標目錄的指定及搜索