为了用自定义属性装饰成员,在 CIL 中定义数组文字的语法是什么?
我正在用 CIL 编写一些 .NET 代码(使用 ilasm.exe 编译它),我需要用自定义属性装饰一个方法。该属性的构造函数将整数数组作为其唯一参数。我怎样才能在 CIL 中做到这一点?
这是自定义属性构造函数的签名(我无法更改):
public FooAttribute(int[] values) {
// some hidden constructor stuff
}
如果我用 C# 编写,这就是我如何装饰我的方法(但我不能):
[Foo(new int[] {1, 2, 3, 4})]
public string Bar() {
return "Some text";
}
使用 ildasm.exe 查看编译后的 C#(尝试通过逆向工程来理解)给了我一个丑陋且无法使用的二进制文字。我尝试改用 Reflector.NET,它看起来好多了,但 ilasm.exe 在关键字“new”处引发语法错误,所以我不能使用它:
.custom instance void SomeNamespace.FooAttribute::.ctor(int32[]) = { new int32[int32(4)] { int32(1), int32(2), int32(3), int32(4) } }