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>