msbuild, che definisce i simboli di compilazione condizionale

Sono forse solo cieco, ma c’è una riga di comando per specificare i simboli di compilazione condizionale in MSBUILD?

Al momento ho questa linea nel mio buildscript:

SET MSBUILD=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe SET CONFIG=Debug %MSBUILD% /p:Configuration=%CONFIG% /p:OutputPath=..\..\output source\MyProject\MyProject.csproj 

E mi piacerebbe aggiungere una condizione. In Visual Studio, posso andare in Proprietà del progetto => Build => Simboli di compilazione condizionale, ma non ho visto questa opzione per msbuild?

Bonus Karma se sai se riesco a scavalcare completamente tutti i simboli già specificati nei file .csproj per assicurarti che entrino solo i condizionali del mio Buildscript.

Hai visto questo ? (la maggior parte delle informazioni è nel penultimo post)

 /p:DefineConstants="MYSYMBOL1;MYSYMBOL2" 

Ho dovuto usare uno spazio invece di un punto e virgola a questo post di Björn Lasar: http://www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx

Aggiornamento: il blog è scomparso; recuperato tramite l’archivio Internet :

Recentemente ho dovuto usare MSBuild direttamente per automatizzare alcune build. Ho anche dovuto configurare alcune definizioni del preprocessore basate su una configurazione. Questo di solito è fatto da un argomento come questo

 "/p:DefineConstants=MY_PREPROC_FLAG" 

Niente di speciale qui perché ci sono abbastanza commenti sul web su questo. Oggi avevo bisogno di un Flag in più e ho usato la syntax della riga di comando simile a come l’ho saputo dall’IDE:

 "/p:DefineConstants=MY_PREPROC_FLAG;YET_ANOTHER_FLAG" 

ma questo non ha funzionato.

Quindi il punto è che se vuoi supportare più definizioni di un progetto per linea di comando, dovrai separarle con spazi semplici …

 "/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG" 

e verrà aggiunto alle definizioni (separate da punto e virgola) dall’IDE. Buono a sapersi, penso …

Quello che viene detto nelle risposte è valido per il codice C# , e anche per il codice C # “codebehind” di ASP.NET. Per i progetti Web ASP.NET , se si desidera eseguire la compilazione condizionale anche nelle pagine ASPX, funziona in modo leggermente diverso per il rendering condizionale dell’HTML sulla pagina (nota che ho rimosso MasterPageFile="..." AutoEventWireup="true" CodeBehind="..." Inherits="..." che normalmente hai anche nella dichiarazione <%@ ... %> :

 <%@ Page Title="MyPage" Language="C#" CompilerOptions="/d:DebugSym1;DebugSym2" %> <% #if DebugSym1 %> 

Section1

<% #else %>

(Section 1 skipped)

<% #endif %> <% #if DebugSym2 %>

Section2

<% #else %>

(Section 2 skipped)

<% #endif %>

Se rimuovi DebugSym1 o DebugSym2 da CompilerOptions , viene #else parte #else relativa #if .

Ho pensato che fosse degno di menzione per la completezza di questo argomento e posso farti risparmiare tempo. Altro che puoi trovare in questo articolo , se sei interessato.

/p:DefineConstants è un affare tutto o niente.

Se vuoi solo distriggersre il simbolo di traccia, non puoi farlo semplicemente con: msbuild /p:DefineTrace=false

Devi definire qualcosa per sovrascrivere tutti i simboli già definiti: msbuild /p:DefineConstants="RANDOM-SYMBOL"

Grazie a Michael Stum, ho puntato su questa regola nascosta. Ho anche scritto un blog a riguardo