我想向类添加一个类型的字段,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 消息“类型' <Module>
'来自程序集'TestApp,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'有一个非法类型的字段。”
如果我删除FieldAttributes.HasFieldRVA
,我不会收到任何错误,但会at I_00000000
消失,我认为这意味着该字段不会被初始化。