2011-01-25 12 views
6

Ho una soluzione abbastanza complessa, contenente 10 progetti oltre ai progetti di test. Si tratta di una rete di applicazioni distribuite & servizi che comunicano tramite servizio remoto; quindi avere gli assembly referenziati corretti (versioni &) è fondamentale. Ecco perché voglio che tutto sia compilato e racchiuso in una sola build.Costruisci l'intera soluzione ma aggiungi i simboli globali di compilazione condizionale per un solo progetto

Una delle applicazioni è uno strumento demo/analisi che esegue un sottoprocesso di un'altra, molto più grande, basata sull'input dell'utente e visualizza i risultati; In questo modo gli ingegneri hanno uno strumento per aiutare a modificare le loro impostazioni per "il grande calcolo". Ovviamente questo sottoprocesso è contenuto in un altro assembly, e gran parte dei risultati te presentati agli ingegneri è generata da

#if ENABLE_TRACE_MATCHING 
Trace.WriteLine("Some engineering output"); 
#endif 

Il mio problema è che i simboli di compilazione condizionale nelle impostazioni del progetto sono limitati a un'assemblea che del progetto, e fanno non propagare su assembly referenziati. Come posso configurare la mia costruire in modo tale che tutti i progetti saranno costruiti senza ENABLE_TRACE_MATCHING in fase di definizione, tranne che per il progetto un debug/analisi-app in cui tutti i progetti a cui fa riferimento/assiemi devono essere compilati con ENABLE_TRACE_MATCHING essere definito

Inoltre non posso sostituire #if ENABLE_TRACE_MATCHING di #if DEBUG, poiché ciò consentirebbe un sacco di output diversi che i nostri ingegneri non saprebbero come gestire.

Grazie in anticipo.

PS: Se pensi che il mio codice profuma, allora sono d'accordo. Inoltre: in genere non è il mio codice;)

+0

ho dimenticato di dire: 'tutto C# e .NET 3.5 – user588939

risposta

1

Hai bisogno di saperne di più su Microsoft Build, che è uno strumento Microsoft .NET pronto all'uso presente nell'installazione di qualsiasi framework.

Utilizzando MSBuild è possibile definire questi "simboli" (proprietà) e un batch di comandi (obiettivi).

È possibile creare uno script MSBuild che importi le destinazioni predefinite di Visual Studio da tutti i progetti nella soluzione e dichiara nello script queste proprietà ("simboli").

Infatti, la proprietà per impostare tali simboli esiste già: "DefineConstants".

Quindi, dato che ce l'hai, puoi avere quello script MSBuild che fornisce quel valore di proprietà, riaffermandolo lì, così, TUTTI i target di MSBuild conosceranno questi simboli.

EDIT: Controllare quest'altra domanda anche: msbuild, defining Conditional Compilation Symbols

Problemi correlati