【发布时间】:2012-06-20 22:45:13
【问题描述】:
我正在使用 System.Reflection.Emit 创建一个新的程序集 A,它从现有程序集 B 调用方法。
B 中的方法带有一些自定义属性的注释,我想以编程方式删除它们。我无权访问生成 B 的源代码。
我在 .NET 框架中找不到记录的方式来执行此操作。有什么指点吗?
非常感谢!
【问题讨论】:
-
通过“删除它们”我假设您的意思是“生成一个其元数据和 IL 与目标程序集相同的程序集,除了那些我认为令人讨厌的属性,然后可能替换目标程序集”?这当然可以完成(只需反汇编、删除属性并重新组装),但前提是程序集没有使用强名称进行签名。
-
是的,这正是我想要的,我的程序集没有一个强名称。我可以仅使用 .NET 框架库以编程方式反汇编程序集吗?
-
您必须使用 ildasm.exe 反编译程序集,删除属性的 IL,然后将 humpty-dumpty 与 ilasm.exe 重新组合在一起。以编程方式执行此操作,呃,并非完全不可能。
-
你可能想看看 Mono Cecil:mono-project.com/Cecil
标签: .net clr .net-assembly