Каков синтаксис определения литерала массива в CIL для украшения члена настраиваемым атрибутом?
Я пишу код .NET на CIL (используя 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 выдает синтаксическую ошибку при ключевом слове «новый», поэтому я не могу его использовать:
.custom instance void SomeNamespace.FooAttribute::.ctor(int32[]) = { new int32[int32(4)] { int32(1), int32(2), int32(3), int32(4) } }