2011-12-14 10 views
5

Ho bisogno di aggiungere un po 'di registrazione alla mia app, e deve essere in modalità di rilascio, e devo assicurarmi che il codice di registrazione non sia in esecuzione in produzione. Pertanto mi piacerebbe usare #define e #if per assicurarmi che le istruzioni del registro vengano rimosse quando passo alla produzione.Posso impostare una direttiva per il preprocessore C# da un file centrale?

Il problema è che ho bisogno di accedere a più file, ed è un problema mettere un #define nella parte superiore di ogni file. C'è un modo per avere un #define centralizzato? In questo modo posso rimuovere il singolo #define piuttosto che un #define da tutti i file (il che significa che quasi sicuramente ne dimenticherò uno).

+0

È possibile che si stia meglio utilizzando l'iniezione di dipendenza per utilizzare la classe di registrazione vuota in produzione rispetto alla compilazione condizionale. Avere diverse versioni di binari tra test finali e produzione non è la cosa migliore ... –

risposta

9

Sulla riga di comando, utilizzare lo switch /define. In Visual Studio, selezionare la scheda "Crea" dalla pagina delle proprietà per il progetto e compilare la sezione "Simboli di compilazione condizionale".

Considerare anche invece di utilizzare la compilazione condizionale, invece di rendere i metodi condizionali dei metodi di registrazione. È un'alternativa più gradevole. Ecco come funziona Debug.Assert; è un metodo condizionale, quindi se il simbolo del preprocessore del debug non è definito, il compilatore rimuove semplicemente tutte le chiamate al metodo prima della generazione del codice.

veda anche il mio articolo sul tema:

http://ericlippert.com/2009/09/10/whats-the-difference-between-conditional-compilation-and-the-conditional-attribute/

+0

Sapevo di Debug.Asserire, ma non mi ero reso conto che potevi creare da solo quei metodi condizionali. Questa è una soluzione molto migliore, grazie! –

1

Sì, questo in genere viene eseguito nel file di build o nello script che si utilizza per creare la build. Lo si specifica come argomento della riga di comando su MSBuild.

1

Per aggiungere alla risposta di Dave, simboli di compilazione condizionale globali possono anche essere specificati in Visual.

  1. fare clic destro sul progetto e andare a Proprietà
  2. Vai alla scheda Costruisci

È possibile specificare i simboli che ti piace (DEBUG è già attivata per impostazione predefinita per le configurazioni di debug, quindi questo potrebbe effettivamente darti quello che vuoi già) per la configurazione data, o selezionare "Tutte le configurazioni" nella parte superiore per specificare determinati simboli per tutte le configurazioni.

1

Si sta utilizzando Visual Studio? Nella pagina Proprietà del progetto, nella scheda "Costruisci", c'è una casella di testo "Simboli di compilazione condizionale".

1

Chiama il registro ovunque desideri.

definire i metodi di immissione di registrazione API con

[Conditional ("DEBUG")] 
public void WriteDebugMessage(...) 

Costruisci il tuo programma in modalità debug (che, per impostazione predefinita, definisce 'DEBUG' in VS). Queste chiamate faranno parte dell'assemblea.

Costruisci il tuo programma in modalità di rilascio (oppure - rimuovi il simbolo DEBUG dalla definizione di build). Queste chiamate sono ora prive di significato e non verranno eseguite.

Sembra proprio quello che vuoi?

Problemi correlati