【发布时间】:2013-09-09 01:29:44
【问题描述】:
我想将byte[] 类型的字段添加到<Module> 类,并使用Mono.Cecil 将其初始化为任意字节数组。以下不起作用。
TypeDefinition moduleClass = ModuleDefinition
.GetAllTypes()
.Single(typedef => typedef.Name == "<Module>");
FieldDefinition myBytes = new FieldDefinition("myBytes"
,FieldAttributes.Private | FieldAttributes.Static | FieldAttributes.HasFieldRVA
,ModuleDefinition.Import(typeof(byte[])));
myBytes.InitialValue = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
moduleClass.Fields.Add(myBytes);
这是 ILSpy 中的结果(使用“IL”视图)。
.class private auto ansi '<Module>'
{
// Fields
.field private static uint8[] myBytes at I_00000000
} // end of class <Module>
当我尝试执行修改后的程序集时,我收到一个 TypeLoadException 消息“Type '<Module>' from assembly 'TestApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' has a field of an非法类型。”
如果我删除 FieldAttributes.HasFieldRVA,我不会收到任何错误,但 at I_00000000 会消失,我认为这意味着该字段不会被初始化。
【问题讨论】:
标签: .net mono.cecil