【发布时间】:2011-03-26 23:18:15
【问题描述】:
我对 CIL 了解不多,除了程序集中有记录类型信息的元数据。
是否有可能创建一些能够读取 C# 或 VB.NET 程序集并更改其元数据以使所有类成员公开的反映工具?
会很简单(例如,为 CIL 中的每个方法更改一个或两个字节)吗?
【问题讨论】:
标签: c# .net vb.net reflection
我对 CIL 了解不多,除了程序集中有记录类型信息的元数据。
是否有可能创建一些能够读取 C# 或 VB.NET 程序集并更改其元数据以使所有类成员公开的反映工具?
会很简单(例如,为 CIL 中的每个方法更改一个或两个字节)吗?
【问题讨论】:
标签: c# .net vb.net reflection
是的,这是可能的,但并不总是安全的。有一些代码使用反射 API 来查找类型、方法、字段等。如果代码显式查找非公共的,将它们公开将破坏代码。同样,如果代码查找公共代码并期望不包含非公共代码,那么再次将这些代码公开将破坏代码。
据我所知,执行此操作的最佳工具是 Mono.Cecil,这是一个可以读取、操作和编写 .NET 程序集的开源库。
【讨论】:
Mono.Cecil非常相似。
举例证明:当您使用调试器时,您可以看到对象的私有成员,包括从其他程序集导入的那些。
【讨论】:
如果程序集具有强名称,那么您将无法用修改后的程序集替换原始程序集。
【讨论】: