我创建了以下简单方法:
public static void Main () {
Console.WriteLine("Hello world!");
Console.ReadKey(true);
}
然后我使用ILSpy获取MSIL代码:
.method public hidebysig static void Main() cil managed {
.entrypoint
.maxstack 8
nop
ldstr "Hello world!"
call void [mscorlib]System.Console::WriteLine(string)
nop
ldc.i4.1
call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey(bool)
pop
ret
}
最后,我尝试使用我发现here的#if IL
技巧将MSIL代码写入我的C#代码。
public static void Main () {
#if IL
nop
ldstr "Hello world!"
call void [mscorlib]System.Console::WriteLine(string)
nop
ldc.i4.1
call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey(bool)
pop
ret
#else
Console.WriteLine("Hello world!");
Console.ReadKey(true);
#endif
}
我尝试使用和不使用nop
以及使用和不使用#else
时使用此技巧,但Visual Studio从未编译过MSIL代码。我的错误在哪里,或者有另一种方法(如果有办法)将MSIL代码写入C#代码?