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