5

Ad esempio, ho un progetto di Visual Studio con una configurazione denominata "MyConfig" e ho definito il simbolo di compilazione MY_CONFIG_SYMBOL.È possibile utilizzare simboli di compilazione condizionale in eventi di generazione VS?

C'è una macro o un comando per vedere se MY_CONFIG_SYMBOL è definito negli eventi di pre/post build? Qualcosa come #if MY_CONFIG_SYMBOL, ma per l'evento di build?

+1

Qualche fortuna nel trovare una risposta? – Thracx

+0

@Thracx Alla fine ho trovato una risposta. Vedi sotto. –

risposta

2

Ho finalmente trovato una risposta. Le seguenti opere perfettamente:

if "$(DefineConstants.Contains('DEBUG'))" == "True" <command> 

Questo funziona per qualsiasi costanti definite nella build, ma nota che la costante è case-sensitive ('debug' = 'debug'!).

0

Se si intendono le build condizionali basate sui tipi di build (Debug o Release), allora sì. Dai un'occhiata a queste discussioni:

Conditional Post-build event in Visual Studio 2008

How to run Visual Studio post-build events for debug build only

+3

No, voglio dire usare i simboli di compilazione condizionale definiti in Debug o Release. Per la configurazione di Debug, il simbolo della Compilazione Condizionale principale, generalmente definito di default, è 'DEBUG'. Puoi usarlo nel codice, ma puoi usarlo in un evento pre o post build –

0

Beh, questo non è una soluzione, solo cercando di far avanzare lo stato attraverso la condivisione di alcuni esperimenti. (devo ancora trovare un modo per testare i simboli di compilazione condizionale.)

questo come un modo per consolidare il passaggio debug on e off:

<#@ include file="debug.incl" #>` 

some text1 
<# if (xdebug) { #> 
    foo = bas; 
<# } #> 
more text 

Dove debug.incl contiene:

<# 
bool xdebug = true; 
#> 

Il condizionale (se) nel primo file è in grado di vedere il valore di xdebug, quindi l'output viene modificato in base all'impostazione di xdebug in debug.incl.

Purtroppo, tuttavia, i file di output non vengono ricostruiti nelle modifiche a debug.incl, nonostante l'ovvio inclusione di esso. E anche una ricostruzione pulita di & non sembra attivare generazione, quindi è necessario un costrutto di build separato ...

(Ho provato debug.tt invece di debug.incl inutilmente, passare a .incl in modo che debug.cs non è stato creato da debug.tt.)


Questo non ha funzionato molto bene come non vede i simboli di compilazione condizionale, anche se in realtà non accendere l'attributo modello di debug!

<# 
#if DEBUG 
bool xdebug = true; 
#else 
bool xdebug = false; 
#endif 
#> 

some text1 
<# if (xdebug) { #> 
    foo = bas; 
<# } #> 
more text 

con <#@ template debug="true" #> vs. <# template debug=false #> si ottiene l'output condizionale o no, rispettivamente.