2012-12-21 16 views
25

so che posso usare le direttive del preprocessore per verificare la presenza di Debug/uscita in questo modo:#if direttiva del preprocessore per le direttive diverse da DEBUG

#if DEBUG 
    //debug mode 
#elif 
    //release mode 
#endif 

ma per quanto riguarda il controllo per altre configurazioni, come prova. In VB si può fare questo:

#If CONFIG = "Release" Then 
    'Release mode 
#ElseIf CONFIG = "Test" Then 
    'Test mode 
#ElseIf CONFIG = "Debug" Then 
    'Debug mode 
#End If 

Quindi, la mia domanda è in C#, come posso controllare per la modalità di test? Ho un codice che voglio eseguire se sono in debug e test, ma non in modalità di rilascio, quindi, in particolare, ho bisogno di un modo per verificare di non essere in modalità di rilascio. In VB farei questo:

#If Not CONFIG = "Release" Then 
    'Do something here for every configuration that is not Release 
#End If 

risposta

39

E 'lo stesso che per DEBUG, assumendo che avete definito una configurazione di generazione che elenca TEST nella casella di testo "simboli di compilazione condizionale" (sotto le proprietà del progetto > Scheda Crea: questa è una lista delimitata da spazi).

per il codice che si desidera solo per eseguire nella configurazione Test Build:

#if TEST 
// ... 
#endif 

E per il codice non si desidera eseguire nella configurazione di Test Build, è possibile #else quanto sopra, o fare this:

#if !TEST 
// ... 
#endif 
+6

non l'ho fatto sapere come impostare i simboli di compilazione condizionale nella scheda Costruisci. Questo è esattamente quello che stavo cercando! Grazie! +1 per spiegare come impostare i simboli. –

4

Ci sono un paio di modi per gestire i fattori. Nel mio mondo, abbiamo utilizzato quattro tecniche principali:

  1. flag di compilazione (#if)
  2. classi parziali
  3. implementazioni separati
  4. decisioni runtime

Così, per esempio, abbiamo costruito configurazioni per, C# con codice non gestito, C# con tutto il codice gestito, C# per Silverlight. Nel progetto non gestito C# abbiamo un simbolo in fase di compilazione UNMANAGED, per C# abbiamo MANAGED e per la luce argentata abbiamo SILVERLIGHT. Ciò mi consente di inserire piccole attività nel codice e condividere gli stessi file in tutti i progetti. Nessun grosso problema.

Per le classi parziali, abbiamo file .cs separati per ogni progetto che hanno implementazioni del codice marginale. Questo viene usato nei casi in cui non siamo riusciti a fare questo avendo una classe astratta come la classe genitore con la maggior parte dell'implementazione e poi il codice marginale in classi concrete per ciascun target. Questo funziona abbastanza bene.

Per implementazioni separate, riconosciamo che c'è poco che può essere condiviso tra le basi di codice e stiamo meglio con un codice separato. Questo non è l'ideale, ma così sia.

Per i controlli di runtime, è esattamente quello. Anziché controllare DEBUG in un #if, si utilizza un controllo di runtime per un'impostazione per effettuare tale scelta. A meno che non abbiate un'enorme impalcatura di debug, questa non è una cattiva scelta in quanto consente anche di eseguire il debug di campo (ma è possibile che i vincoli di consegna lo impediscano).

Personalmente, cerco di evitare i flag del compilatore. Rendono il codice più difficile da leggere.Onestamente, però, ci sono momenti in cui hanno senso. Abbiamo avuto classi che non si sarebbero compilate in silverlight solo per la dichiarazione di classe (penso che fosse ObservableCollection che non era disponibile) e che dovevamo ereditare da qualcos'altro. Tutto il resto ha funzionato bene.

+0

Grazie per aver condiviso. –

1

risposta più semplice è

  • Vai al progetto -> [nome del progetto] Proprietà-> Costruire
  • Set controllato [] Definire DEBUG

Ora si può giocare con la direttiva DEBUG predecessore come

#if DEBUG 
... 
#else 
... 
#endif 
3

Fare clic con il pulsante destro del mouse sul nome del progetto [nome progetto] che si desidera utilizzare direttiva om precompilatore.

Passare alla proprietà e quindi alla scheda di creazione.

quindi è necessario aggiungere la direttiva personalizzata lì nella casella di testo. Ad esempio, ho aggiunto 'locale' come la mia direttiva personalizzato vedi immagine sotto

enter image description here

ora è possibile possibile utilizzare la nuova direttiva del compilatore, come mostrato qui sotto nella tua (in C#)

#if **Local** 
    //TODO:Add your c# code here 
    #endif 
+1

Possiamo avere questa configurazione per utente al posto della configurazione del progetto –

Problemi correlati