2009-01-26 55 views
54

Posiblemente esté solo a ciegas, pero ¿hay una línea de comando para especificar los símbolos de compilación condicional en MSBUILD?msbuild, definiendo símbolos de compilación condicional

Actualmente tengo esta línea en mi 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 

y me gustaría añadir una condición. En Visual Studio, puedo acceder a Project Properties => Build => Símbolos de compilación condicional, pero no he visto esa opción para msbuild.

Bono Karma si sabe si puedo anular por completo todos los símbolos ya especificadas en los archivos Csproj para asegurarse de que sólo los condicionales de mi Buildscript entran.

+0

Y por cierto, esto no es un duplicado de http://stackoverflow.com/questions/296147/msbuild-conditional-compilation porque la otra pregunta tiene el mismo título pero la respuesta solo incluye la modificación de Visual Studio/Project File. –

Respuesta

108

Ha visto this? (Más información está en el penúltimo puesto)

/p:DefineConstants="MYSYMBOL1;MYSYMBOL2" 
+5

Agregó el código, eso fue todo, ¡gracias! Anula todas las constantes que se pueden definir en el archivo .csproj, lo que también es bueno. –

+1

Ya puedo sentir el karma de bonificación. ;-) – Tomalak

+4

Para que esto funcione para mí, me vi obligado a agregar esto a la línea de comandos:/t: Reconstruir –

13

tuviera que utilizar un espacio en lugar de un punto y coma al estilo de este mensaje por Björn Lasar: http://www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx

Actualización: el blog ha desaparecido;retrieved via Internet Archive:

Recientemente tuve que usar MSBuild directamente para automatizar algunas versiones. También tuve que configurar algunas definiciones de preprocesador basadas en una configuración. Esto se hace generalmente por un argumento como éste

"/p:DefineConstants=MY_PREPROC_FLAG" 

tiene nada de especial, ya que hay suficientes comentarios en la web acerca de eso. Hoy necesitaba una bandera más y he usado la sintaxis de comandos similar a la forma en que sabía que desde el IDE:

"/p:DefineConstants=MY_PREPROC_FLAG;YET_ANOTHER_FLAG" 

pero éste no funcionó.

Así es que si se quiere dar soporte a múltiples define a un proyecto de línea de comandos que tendrá que separarlos por espacios simples ...

"/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG" 

y se añade la letra a (definido por punto y coma) Define desde el IDE. Es bueno saberlo ...

+2

Este es un enlace inactivo. – chrish

+0

@Brody hecho. FWIW la publicación aceptada (que volví a votar) es aún más culpable, pero la marea no ha salido todavía: D –

+2

@RubenBartelink - Bien hecho. – Brody

0

/p:DefineConstants es un todo o nada.

Si lo que desea es desactivar el símbolo de seguimiento, no sólo puede hacerlo con: msbuild /p:DefineTrace=false

Hay que definir algo para anular todos los símbolos ya definidos: msbuild /p:DefineConstants="RANDOM-SYMBOL"

Gracias punto de Michael Stum esta regla oculta a cabo I have also wrote a blog about it

1

Lo que se dice en las respuestas es válida para C# código, y también para ASP.NET "código subyacente" código C#.Para proyectos web ASP.NET, si desea hacer una compilación condicional también en las páginas ASPX, funciona de forma un poco diferente para representar HTML de forma condicional en la página (nota que he eliminado MasterPageFile="..." AutoEventWireup="true" CodeBehind="..." Inherits="..." que generalmente tiene en la declaración <%@ ... %> también):

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

<% #if DebugSym1 %>   
    <h4>Section1</h4> 
<% #else %> 
    <h4>(Section 1 skipped)</h4> 
<% #endif %> 

<% #if DebugSym2 %>   
    <h4>Section2</h4> 
<% #else %> 
    <h4>(Section 2 skipped)</h4> 
<% #endif %> 

Si quita DebugSym1 o DebugSym2 del CompilerOptions, a continuación, la parte de la #else#if declaración pertinente se representa.

Pensé que valía la pena mencionar esto para completar este tema y puede ahorrarle tiempo. Más puede encontrar en este article, si está interesado.

Cuestiones relacionadas