J'essaie d'utiliser des directives de préprocesseur simples pour le mode de débogage et de libération en C#.Directives de préprocesseur C# dans le code IL
Par exemple:
using System;
public class C {
public void M() {
#if DEBUG
Console.WriteLine("Debug");
#else
Console.WriteLine("Release");
#endif
}
}
Ce code très simple et clair.
Mais quand je vois dans le code IL je n'ai rien à propos de la directive de débogage.
.class private auto ansi '<Module>'
{
} // end of class <Module>
.class public auto ansi beforefieldinit C
extends [mscorlib]System.Object
{
// Methods
.method public hidebysig
instance void M() cil managed
{
// Method begins at RVA 0x2050
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Release"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method C::M
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Method begins at RVA 0x205e
// Code size 8 (0x8)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: nop
IL_0007: ret
} // end of method C::.ctor
} // end of class C
C'est très intéressant pour moi, pourquoi cela arrive.
Je veux dire pourquoi je ne vois rien sur le mode DEBUG dans le code IL?
P.S. J'utilise sharplab pour voir le code IL.
P.S.2 en direct example
Est-ce que vous regardez l'IL pour la configuration de débogage? – GalacticCowboy
@GalacticCowboy non, je regarde dans la configuration DEBUG –
Ce que vous avez montré est le Release IL. Le débogage IL ne sera pas le même. – GalacticCowboy