Share via


Elemento When (MSBuild)

Especifica un posible bloque de código que el elemento Choose puede seleccionar.

<Proyecto><Choose><When><Choose> ... <Otherwise><Choose> ...

Sintaxis

<When Condition="'StringA'=='StringB'">
    <PropertyGroup>... </PropertyGroup>
    <ItemGroup>... </ItemGroup>
    <Choose>... </Choose>
</When>

Atributos y elementos

En las siguientes secciones se describen los atributos, los elementos secundarios y los elementos primarios.

Atributos

Atributo Descripción
Condición Atributo necesario.

Condición que se va a evaluar. Para obtener más información, consulte Condiciones.

Elementos secundarios

Elemento Descripción
Choose Elemento opcional.

Evalúa los elementos secundarios para seleccionar una sección de código y ejecutarla. Puede haber cero o más elementos Choose en un elemento When.
ItemGroup Elemento opcional.

Contiene un conjunto de elementos Item definidos por el usuario. Puede haber cero o más elementos ItemGroup en un elemento When.
PropertyGroup Elemento opcional.

Contiene un conjunto de elementos Property definidos por el usuario. Puede haber cero o más elementos PropertyGroup en un elemento When.

Elementos primarios

Elemento Descripción
Elemento Choose (MSBuild) Evalúa los elementos secundarios para seleccionar una sección de código y ejecutarla.

Observaciones

Si el atributo Condition se evalúa en true, los elementos secundarios ItemGroup y PropertyGroup del elemento When se ejecutarán y todos los elementos subsiguientes When se omitirán.

Los elementos Choose, When y Otherwise se utilizan juntos para ofrecer un modo de seleccionar una sección de código para que ejecute una serie de alternativas posibles. Para obtener más información, vea Construcciones condicionales.

Ejemplo

En el proyecto siguiente se utiliza el elemento Choose para seleccionar el conjunto de valores de propiedad de los elementos When que desea establecer. Si los atributos Condition de ambos elementos When se evalúan como false, se establecen los valores de propiedad del elemento Otherwise. Al ejecutar el ejemplo, intente pasar varias opciones de configuración de propiedad desde la línea de comandos, como msbuild myproj.proj -p:Configuration=Test;Platform=x86, y vea el aspecto de la ruta de acceso de salida. En el ejemplo se supone que el requisito es establecer determinadas propiedades para las compilaciones de depuración y versión, incluida la carpeta de salida basada en el valor de bits de la plataforma en lugar del nombre real de la plataforma, y también admite las configuraciones "Test" y "Retail", pero trata "Retail" como "Release".

<Project>
    <PropertyGroup>
       <Configuration Condition="$(Configuration) == ''">Debug</Configuration>
       <Platform Condition="$(Platform) == ''">x64</Platform>
    </PropertyGroup>

  <Choose>
     <When Condition="$(Configuration)=='Test'">
        <PropertyGroup>
            <DebugSymbols>true</DebugSymbols>
            <DebugType>full</DebugType>
            <Optimize>false</Optimize>
            <DefineConstants>DEBUG;TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
            <PropertyGroup>
                <OutputPath>.\bin\Test\32-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
            <PropertyGroup>
                <OutputPath>.\bin\Test\64-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <!-- For any other platform, use the platform name -->
          <Otherwise>
            <PropertyGroup>
              <OutputPath>.\bin\Test\$(Platform)\</OutputPath>
            </PropertyGroup>
          </Otherwise>
        </Choose>
      </When>
      <When Condition="$(Configuration)=='Retail' Or $(Configuration)=='Release'">
        <PropertyGroup>
            <DebugSymbols>false</DebugSymbols>
            <Optimize>true</Optimize>
            <DefineConstants>TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
             <PropertyGroup>
                <OutputPath>.\bin\Release\32-bit\</OutputPath>
             </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
             <PropertyGroup>
                <OutputPath>.\bin\Release\64-bit\</OutputPath>
             </PropertyGroup>
          </When>
          <!-- For any other platform, use the platform name -->
          <Otherwise>
            <PropertyGroup>
                <OutputPath>.\bin\Release\$(Platform)\</OutputPath>
            </PropertyGroup>
          </Otherwise>
        </Choose>
      </When>
      <!-- For any other configuration, use debug properties-->
      <Otherwise>
        <PropertyGroup>
            <DebugSymbols>true</DebugSymbols>
            <DebugType>full</DebugType>
            <Optimize>false</Optimize>
            <DefineConstants>DEBUG;TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform)=='ARM32'">
            <PropertyGroup>
              <OutputPath>.\bin\$(Configuration)\32-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform)=='ARM64'">
            <PropertyGroup>
              <OutputPath>.\bin\$(Configuration)\64-bit\</OutputPath>
            </PropertyGroup>
          </When>
        </Choose>
       </Otherwise>
  </Choose>

  <Target Name="ShowProperties">
    <Message Text="DebugSymbols: $(DebugSymbols)"/>
    <Message Text="Optimize: $(Optimize)"/>
    <Message Text="DefineConstants: $(DefineConstants)"/>
    <Message Text="OutputPath: $(OutputPath)"/>
  </Target>
</Project>

Consulte también