.net MSIL中每个类的最大字段数

.net MSIL中每个类的最大字段数,.net,il,.net,Il,我正在设计一个系统,对.NET程序集进行后期处理,并为程序集中找到的每个ldstrIL指令添加一个新的字符串字段。我将创建一个新类并向其中添加字段,然后用ldfld(或其他)替换ldstr指令,以便在运行时访问该字段 类可以包含的字段数量有限制吗?我现在想到的可能是数万个领域 我正在使用Mono.Cecil进行IL工作。 字段元数据表中的ID为3个字节(四个字节中的第一个字节用于标识该表)。这意味着一个模块中的最大可能字段数(一个程序集中通常只有一个模块)为16M CLR似乎仅限于单个类型中的6

我正在设计一个系统,对.NET程序集进行后期处理,并为程序集中找到的每个
ldstr
IL指令添加一个新的字符串字段。我将创建一个新类并向其中添加字段,然后用
ldfld
(或其他)替换
ldstr
指令,以便在运行时访问该字段

类可以包含的字段数量有限制吗?我现在想到的可能是数万个领域

我正在使用Mono.Cecil进行IL工作。

  • 字段
    元数据表中的ID为3个字节(四个字节中的第一个字节用于标识该表)。这意味着一个模块中的最大可能字段数(一个程序集中通常只有一个模块)为16M
  • CLR似乎仅限于单个类型中的64k-1字段。您将无法创建包含比使用Reflection.Emit更多字段的类型,或者使用Reflection.Emit加载此类类型。但您可以通过创建多个类型来解决这个问题,每个类型都低于此限制
  • Mono Cecil没有这个限制,所以您可以创建一个包含更多字段的类型,但您将无法使用它(至少在.Net的MS实现中,Mono的行为可能会有所不同)

这是基于查看ECMA CIL规范和我自己的测试。

最大值远远超过数万。很好,问题解决了。:-)如果有人想在回答中发布更多信息,我很乐意接受。你的第一点限制是每个模块,而不是每个组件。。。如果你愿意在你的组件中有多个模块,这可能会大大超出限制。