Какъв е синтаксисът за дефиниране на литерал на масив в 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) } }