5

Je sais que si je marque le code comme code DEBUG, exécutera en mode RELEASE, mais est-il encore compilé dans un assembly? Je veux juste m'assurer que mon assembly n'est pas gonflé par des méthodes supplémentaires.Conditional DEBUG - Compile-t-il encore en code RELEASE?

[Conditional(DEBUG)] 
private void DoSomeLocalDebugging() 
{ 
    //debugging 
} 

Répondre

10

Oui, la méthode elle-même encore est construit cependant vous compilez.

C'est tout à fait logique - parce que le point de Conditional est de dépendre des symboles de préprocesseur définis lorsque l'appelant est construit, pas lorsque le est construit callee.

Test simple - construire ceci:

using System; 
using System.Diagnostics; 

class Test 
{ 
    [Conditional("FOO")] 
    static void CallMe() 
    { 
     Console.WriteLine("Called"); 
    } 

    static void Main() 
    { 
     CallMe(); 
    } 
} 

exécuter le code (sans définir FOO) et vous verrez qu'il n'y a pas de sortie, mais si vous regardez dans le réflecteur, vous verrez la méthode est toujours là.

En d'autres termes: pensez-vous que les assemblys libérés .NET (ceux que nous compilons) sont construits avec le symbole DEBUG défini? Si ce n'est pas le cas (et je le soupçonne fortement qu'ils ne le sont pas!), Comment pourrions-nous appeler Debug.Assert etc?

Il est vrai que quand vous construisez privés méthodes, il serait logique de ne pas inclure - mais comme vous pouvez le voir, il est encore construit - qui est raisonnable pour la simplicité et de cohérence.

+1

+1 Vous avez raison. Qu'est-ce qui était stupide de penser cela? – kemiller2002

Questions connexes