Elemento When (MSBuild)

Especifica um possível bloco de códigos para o elemento Choose selecionar.

<Projeto><Choose><When><Choose> ... <Otherwise><Choose> ...

Syntax

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

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Descrição
Condição Atributo obrigatório.

Condição a ser avaliada. Para obter mais informações, consulte Condições.

Elementos filho

Elemento Descrição
Choose Elemento opcional.

Avalia elementos filhos para selecionar uma seção do código para executar. Pode ser que não haja nenhum ou mais de um elemento Choose em um elemento When.
ItemGroup Elemento opcional.

Contém um conjunto de elementos Item definidos pelo usuário. Pode ser que não haja nenhum ou mais de um elemento ItemGroup em um elemento When.
PropertyGroup Elemento opcional.

Contém um conjunto de definidos elementos Property definidos pelo usuário. Pode ser que não haja nenhum ou mais de um elemento PropertyGroup em um elemento When.

Elementos pai

Elemento Descrição
Elemento Choose (MSBuild) Avalia elementos filhos para selecionar uma seção do código para executar.

Comentários

Se o atributo Condition for avaliado como verdadeiro, os elementos ItemGroup filho e PropertyGroup do elemento When serão executados e todos os elementos When subsequentes serão ignorados.

Os elementos Choose, When e Otherwise são usados juntos para fornecer uma maneira de selecionar uma seção de código para executar entre diversas possíveis alternativas. Para obter mais informações, confira Constructos condicionais.

Exemplo

O seguinte projeto usa o Choose elemento para selecionar o conjunto de valores de propriedades no elemento When a ser definido. Se os Condition atributos de ambos When elementos são avaliadas como false, os valores de propriedades no elemento Otherwise são definidos. Ao executar o exemplo, tente passar várias configurações de propriedade da linha de comando, como msbuild myproj.proj -p:Configuration=Test;Platform=x86, e veja como fica o caminho de saída. O exemplo supõe que o requisito seja definir determinadas propriedades para builds de depuração e lançamento, incluindo a pasta de saída com base no número de bits da plataforma, em vez de o nome real da plataforma, e dar suporte às configurações de "Test" e "Retail", mas tratar '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>

Confira também