使用Mono.Cecil更改程序集dll特性
2012-05-12 16:32
316 查看
工作中发现一个公共组件因为某个类不带有[Serializable]特性,导致保存到memcache时出错。刚好负责的同事请假不在,尝试了iLSpy反编译方法后,最后决定使用Mono.Cecil直接修改现成的程序集dll解决。 示例代码如下:
Mono.Cecil除了可以更改特性,还能把sealed类更改为public类,功能非常强大。 下载demo
参考资料: 使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model
class Program { static void Main(string[] args) { var asmFile = "TestDll.dll"; // 程序集名 Console.WriteLine("add serializable attribute for '{0}'.", asmFile); var asmDef = AssemblyDefinition.ReadAssembly(asmFile, new ReaderParameters { ReadSymbols = true // 标识是否读取修改pdb文件 }); // 取类名中包含"Entity"字符串的类 var types = asmDef.Modules .SelectMany(m => m.Types) .Where(t => t.Name.Contains("Entity")); // 设置类为可序列化 foreach (var type in types) { type.IsSerializable = true; } // 重新保存dll var newAsmFileName = "TestDll_new.dll"; asmDef.Write(newAsmFileName, new WriterParameters { WriteSymbols = true }); Console.WriteLine("new dll has save as {0}.", newAsmFileName); } }
Mono.Cecil除了可以更改特性,还能把sealed类更改为public类,功能非常强大。 下载demo
参考资料: 使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model
相关文章推荐
- Mono.Cecil使用示例之使指定程序集成为UnityEditor.dll的友元程序集
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
- 使用Mono Cecil 动态获取运行时数据 (Atribute形式 进行注入 用于写Log) [此文报考 xxx is declared in another module and needs to be imported的解决方法]-摘自网络
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
- 使用Mono.Cecil对MSIL进行注入
- 使用Mono.Cecil改变访问级别
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
- Unity3d-在Unity项目中使用Mono DLL(动态链接库)
- 使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model
- 使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
- 使用Mono.Cecil对MSIL进行注入
- 使用MOno Cecil 的相关开源项目
- 利用Mono.Cecil动态修改程序集来破解商业组件
- 在Unity中利用Mono.Cecil将代码注入到Dll中
- 利用Mono.Cecil动态修改程序集来破解商业组件
- 【Unity基础知识之五】Unity3d-在Unity项目中使用Mono DLL(动态链接库)
- @Register 和 @Import 之间有什么区别呢?什么地方最适合由 ASP.NET 应用程序使用的非系统程序集 DLL?
- Mono.Cecil使用示例之获取源文件路径
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)