Compartir a través de


Cómo: Compilar los mismos archivos de código fuente con diferentes opciones

Al compilar proyectos, a menudo se compila los mismos componentes con distintas opciones de compilación. Por ejemplo, se puede crear una versión de depuración con información de símbolos o una versión de lanzamiento sin información de símbolos pero con optimizaciones habilitadas. También se puede compilar un proyecto para que se ejecute en una plataforma concreta, como x86 o x64. En todos estos casos, la mayoría de las opciones de compilación no varían y sólo cambian algunas opciones para controlar la configuración de compilación. Con MSBuild, se utilizan propiedades y condiciones para crear configuraciones de compilación diferentes.

Utilizar propiedades para modificar proyectos

El elemento Property define una variable a la que se hace referencia en varias ocasiones en un archivo de proyecto, como la ubicación de un directorio temporal, o que establece los valores de las propiedades utilizadas en varias configuraciones, como una versión de depuración y una versión de lanzamiento. Para obtener más información sobre propiedades, vea Propiedades de MSBuild.

Se pueden utilizar propiedades para cambiar la configuración de la compilación sin tener que cambiar el archivo de proyecto. El atributo Condition del elemento Property y el elemento PropertyGroup permiten cambiar el valor de las propiedades. Para obtener más información acerca de las condiciones de MSBuild, vea Condiciones de MSBuild.

Para establecer un grupo de propiedades basado en otra propiedad

  • Utilice un atributo Condition en un elemento PropertyGroup similar al siguiente:

    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
        <DebugType>full</DebugType>
        <Optimize>no</Optimize>
    </PropertyGroup>
    

Para definir una propiedad basada en otra propiedad

  • Utilice un atributo Condition en un elemento Property similar al siguiente:

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
    

Especificar propiedades en la línea de comandos

Una vez que el archivo de proyecto se escribe para aceptar varias configuraciones, se necesita tener la capacidad de cambiar esas configuraciones cada vez que se compila el proyecto. MSBuild proporciona esta capacidad permitiendo especificar propiedades en la línea de comandos mediante el modificador /property o /p.

Para establecer una propiedad del proyecto en la línea de comandos

  • Utilice el modificador /property con la propiedad y el valor de propiedad. Por ejemplo:

    msbuild file.proj /property:Flavor=Debug
    

    -O bien-

    Msbuild file.proj /p:Flavor=Debug
    

Para especificar más de una propiedad del proyecto en la línea de comandos

  • Utilice el modificador /property o /p varias veces con la propiedad y los valores de propiedad, o bien utilice un modificador /property o /p y separe las distintas propiedades con punto y coma (;). Por ejemplo:

    msbuild file.proj /p:Flavor=Debug;Platform=x86
    

    O bien

    msbuild file.proj /p:Flavor=Debug /p:Platform=x86
    

Las variables de entorno también se tratan como propiedades y se incorporan automáticamente mediante MSBuild. Para obtener más información sobre el uso de variables de entorno, vea Cómo: Utilizar variables de entorno al compilar.

El valor de propiedad especificado en la línea de comandos tiene prioridad sobre cualquier valor establecido para la misma propiedad en el archivo de proyecto, y dicho valor en el archivo de proyecto tiene prioridad sobre el valor en una variable de entorno.

Puede cambiar este comportamiento mediante el atributo TreatAsLocalProperty en una etiqueta del proyecto. Para los nombres de propiedades que se enumeran con ese atributo, el valor de propiedad especificado en la línea de comandos no tiene prioridad sobre el valor en el archivo de proyecto. Puede encontrar un ejemplo más adelante en este tema.

Ejemplo

El ejemplo de código siguiente, el proyecto “Hello World”, contiene dos nuevos grupos de propiedades que se pueden utilizar para crear una versión de depuración y una versión de lanzamiento.

Para compilar la versión de depuración (debug) de este proyecto, escriba:

msbuild consolehwcs1.proj /p:flavor=debug

Para compilar la versión comercial (retail) de este proyecto, escriba:

msbuild consolehwcs1.proj /p:flavor=retail

<Project DefaultTargets = "Compile"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <!-- Sets the default flavor of an environment variable called 
    Flavor is not set or specified on the command line -->
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
    </PropertyGroup>

    <!-- Define the DEBUG settings -->
    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
        <DebugType>full</DebugType>
        <Optimize>no</Optimize>
    </PropertyGroup>

    <!-- Define the RETAIL settings -->
    <PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
        <DebugType>pdbonly</DebugType>
        <Optimize>yes</Optimize>
    </PropertyGroup>

    <!-- Set the application name as a property -->
    <PropertyGroup>
        <appname>HelloWorldCS</appname>
    </PropertyGroup>

    <!-- Specify the inputs by type and file name -->
    <ItemGroup>
        <CSFile Include = "consolehwcs1.cs"/>
    </ItemGroup>

    <Target Name = "Compile">
        <!-- Run the Visual C# compilation using input files
        of type CSFile -->
        <CSC  Sources = "@(CSFile)"
            DebugType="$(DebugType)"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe" >

            <!-- Set the OutputAssembly attribute of the CSC
            task to the name of the executable file that is 
            created -->
            <Output TaskParameter="OutputAssembly"
                ItemName = "EXEFile" />
        </CSC>
        <!-- Log the file name of the output file -->
        <Message Text="The output file is @(EXEFile)"/>
    </Target>
</Project>

El ejemplo siguiente se muestra cómo utilizar el atributo TreatAsLocalProperty . La propiedad Color tiene un valor Blue en el archivo de proyecto y Green en la línea de comandos. Con TreatAsLocalProperty="Color" en la etiqueta del proyecto, la propiedad de la línea de comandos (Green) no reemplaza la propiedad que se define en el archivo de proyecto (Blue).

Para compilar el proyecto, escriba el comando siguiente:

msbuild colortest.proj /t:go /property:Color=Green

<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" TreatAsLocalProperty="Color">

    <PropertyGroup>
        <Color>Blue</Color>
    </PropertyGroup>

    <Target Name="go">
        <Message Text="Color: $(Color)" />
    </Target>
</Project>

<!--
  Output with TreatAsLocalProperty="Color" in project tag:
     Color: Blue

  Output without TreatAsLocalProperty="Color" in project tag:
     Color: Green
-->

Vea también

Referencia

Elemento Project (MSBuild)

Otros recursos

MSBuild

Conceptos de MSBuild

Referencia de MSBuild