Есть ли библиотека straighforward, которую я могу использовать для доступа к CIL для .NET-типа? Позвольте мне показать, что я хочу фиктивный CilExtractor
сделать:Программный доступ к CIL для .NET-типа
[Serializable]
public class Type_For_Extract_Cil_Test {
private int _field = 3;
public int Method(int value) {
checked {
return _field + value;
}
}
}
[Test]
public void Extract_Cil_For_Type_Test() {
string actualCil = CilExtractor.ExtractCil(typeof(Type_For_Extract_Cil_Test));
string expectedCil = @"
.class public auto ansi serializable beforefieldinit Type_For_Extract_Cil_Test
extends [mscorlib]System.Object
{
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed
{
.maxstack 8
ldarg.0
ldc.i4.3
stfld int32 Type_For_Extract_Cil_Test::_field
ldarg.0
call instance void [mscorlib]System.Object::.ctor()
ret
}
.method public hidebysig instance int32 Method(int32 'value') cil managed
{
.maxstack 8
ldarg.0
ldfld int32 Type_For_Extract_Cil_Test::_field
ldarg.1
add.ovf
ret
}
.field private int32 _field
}";
// indentations and code formatting issues apart, this should succeed
Assert.AreEqual(expectedCil, actualCil);
}
Я знаю, что могу сделать это с Mono.Cecil или отражатель, но я также знаю, что я должен написать много кода для достижения этой цели. Поскольку Reflector уже делает это в своем пользовательском интерфейсе, нет ли простого способа доступа к этой функции, например, с помощью простого вызова метода? Существуют ли другие библиотеки, которые лучше подходят для этого конкретного сценария?
В эпоху доминирующего рефлектора я полностью забыл о ildasm. Спасибо за напоминание! –