Mono.Cecil 修改目標.NET的IL代碼保存時報異常的處理。

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