msbuild, définition des symboles de compilation conditionnels

Je suis peut-être juste aveugle, mais existe-t-il une ligne de commande pour spécifier des symboles de compilation conditionnels dans MSBUILD?

J’ai actuellement cette ligne dans mon script de compilation:

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 

Et j’aimerais append une condition. Dans Visual Studio, je peux simplement aller dans Propriétés du projet => Build => Symboles de compilation conditionnelle, mais je n’ai pas vu cette option pour msbuild?

Bonus Karma si vous savez si je peux complètement remplacer tous les symboles déjà spécifiés dans les fichiers .csproj pour vous assurer que seules les conditions de mon fichier Buildscript sont entrées.

Avez-vous vu ça ? (la plupart des informations sont dans l’avant-dernier message)

 /p:DefineConstants="MYSYMBOL1;MYSYMBOL2" 

Je devais utiliser un espace au lieu d’un point-virgule à cet article de Björn Lasar: http://www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx

Mise à jour: le blog a disparu; récupéré via Internet Archive :

Récemment, j’ai dû utiliser MSBuild directement pour automatiser certaines versions. J’ai également dû configurer des définitions de préprocesseur basées sur une configuration. Ceci est généralement fait par un argument comme celui-ci

 "/p:DefineConstants=MY_PREPROC_FLAG" 

Rien de spécial ici car il y a suffisamment de commentaires sur le web à ce sujet. Aujourd’hui, il me fallait un drapeau de plus et j’ai utilisé la syntaxe en ligne de commande similaire à celle que je connaissais depuis l’EDI:

 "/p:DefineConstants=MY_PREPROC_FLAG;YET_ANOTHER_FLAG" 

mais celui-ci n’a pas fonctionné.

Donc, le fait est que si vous voulez supporter plusieurs définitions pour un projet en ligne de commande, vous devrez les séparer par des espaces simples …

 "/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG" 

et il sera ajouté au (séparateur de points-virgules) à partir de l’EDI. Bon à savoir je pense …

Ce qui est dit dans les réponses est valide pour C# code C# , ainsi que pour le code C# ASP.NET “codebehind”. Pour les projets Web ASP.NET , si vous souhaitez également effectuer une compilation conditionnelle dans les pages ASPX, le rendu HTML conditionnel de la page est légèrement différent (notez que j’ai supprimé MasterPageFile="..." AutoEventWireup="true" CodeBehind="..." Inherits="..." que vous avez généralement dans la déclaration <%@ ... %> également:

 <%@ 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 %>

Si vous supprimez DebugSym1 ou DebugSym2 des ComstackrOptions , la partie #else de l’instruction #if appropriée est rendue.

Je pensais que cela valait la peine d’être mentionné pour l’exhaustivité de ce sujet et peut vous faire gagner du temps. Vous en trouverez plus dans cet article , si cela vous intéresse.

/p:DefineConstants est un accord tout ou rien.

Si vous voulez simplement désactiver le symbole de trace, vous ne pouvez pas le faire avec: msbuild /p:DefineTrace=false

Vous devez définir quelque chose pour remplacer tous les symboles déjà définis: msbuild /p:DefineConstants="RANDOM-SYMBOL"

Merci Michael Stum sur cette règle cachée, j’ai aussi écrit un blog à ce sujet