sourcemap esmoduleinterop compiler .net msbuild compiler-options

.net - esmoduleinterop - msbuild, definiendo símbolos de compilación condicional



tsconfig sourcemap (4)

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

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 agregar 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.

Bonus Karma si sabe si puedo anular por completo todos los símbolos ya especificados en los archivos .csproj para asegurarme de que solo entran los condicionales de mi Buildscript.


¿Has visto esto ? (la mayoría de la información está en la penúltima publicación)

/p:DefineConstants="MYSYMBOL1;MYSYMBOL2"


/p:DefineConstants es un acuerdo de todo o nada.

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

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

Gracias, Michael Stum, señala esta regla oculta . También escribí un blog sobre ella.


Lo que se dice en las respuestas es válido para C# código C# , y también para C# código C# de ASP.NET "codebehind". Para los proyectos web ASP.NET , si también desea hacer una compilación condicional en las páginas ASPX, funciona de forma un tanto diferente a la representación condicional de HTML en la página (nota que 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 elimina DebugSym1 o DebugSym2 de CompilerOptions , se representa la parte #if declaración #if relevante.

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


Tuve que usar un espacio en lugar de un punto y coma a la vez por Björn Lasar: http://www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx

Actualización: el blog ha desaparecido; recuperado a través de Internet Archive :

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

"/p:DefineConstants=MY_PREPROC_FLAG"

Aquí no hay nada especial ya que hay suficientes comentarios en la web sobre eso. Hoy necesitaba una bandera más y utilicé la sintaxis de línea de comandos similar a la que conocía del IDE:

"/p:DefineConstants=MY_PREPROC_FLAG;YET_ANOTHER_FLAG"

pero este no funcionó.

Entonces, el punto es que si quieres admitir varias definiciones para un proyecto por línea de comandos, tendrás que separarlas por espacios simples ...

"/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG"

y se agregará a las Definiciones (separadas por punto y coma) del IDE. Es bueno saberlo, creo ...