5

So che se contrassegno il codice come codice DEBUG non eseguirà nella modalità RELEASE,, ma verrà comunque compilato in un assembly? Voglio solo assicurarmi che la mia assemblea non sia gonfia di metodi extra.DEBUG condizionale - Compilare ancora nel codice RELEASE?

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

risposta

10

Sì, il metodo stesso ancora è costruito tuttavia si compila.

Questo è del tutto logico - perché il punto di Conditional è dipendere simboli preprocessore definita quando la chiamante è costruito, non quando il callee è costruito.

semplice test - costruire questo:

using System; 
using System.Diagnostics; 

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

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

eseguire il codice (senza definire FOO) e vedrete non c'è uscita, ma se si guarda in Reflector vedrete il metodo è ancora lì.

Per dirla in altro modo: pensi che i .NET assemblee rilasciati (quelle che compilare contro) sono costruiti con il simbolo DEBUG definiti? Se non lo sono (e sospetto fortemente che non lo siano!) Come potremmo chiamare Debug.Assert ecc.?

Certo quando si sta costruendo privati ​​ metodi avrebbe senso non includere - ma come si può vedere, è ancora è incorporato - che è ragionevole per semplicità e coerenza.

+1

+1 Hai ragione. Che cosa è stato stupido da parte mia pensarlo. – kemiller2002