Choose 元素 (MSBuild)

评估子元素,选择一组 ItemGroup 元素和/或 PropertyGroup 元素进行评估。

<Project><Choose><When><Choose> ... <Otherwise><Choose> ...

Choose 元素包含一系列具有 Condition 属性的 When 元素,这些元素按照从顶部到底部的顺序进行测试,直到一个元素的计算结果为 true。 如果多个 When 元素的计算结果为 true,则只使用第一个。 如果 When 元素的任何条件的计算结果均不为 true,则评估 Otherwise 元素(如存在)。

语法

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

特性和元素

下列各节描述了特性、子元素和父元素。

特性

无。

子元素

元素 说明
Otherwise 可选元素。

当所有 When 元素的条件的计算结果为 false 时,指定要计算的代码块 PropertyGroupItemGroup 元素。 Choose 元素中可能没有或只有一个 Otherwise 元素,并且它必须是最后一个元素。
When 必需的元素。

指定一个可能的代码块供 Choose 元素选择。 Choose 元素中可能有一个或多个 When 元素。

父元素

元素 说明
Otherwise 当所有 When 元素的条件的计算结果为 false 时,指定要执行的代码块。
Project MSBuild 项目文件必需的根元素。
When 指定一个可能的代码块供 Choose 元素选择。

备注

ChooseWhenOtherwise 元素一起用来提供一种方式,通过这种方式选择代码的一部分来执行许多种可能的替代选择。 有关详细信息,请参阅条件构造

示例

以下项目使用 Choose 元素来选择要在 When 元素中设置的属性值组。 如果两个 When 元素的 Condition 属性的计算结果均为 false,则将设置 Otherwise 元素中的属性值。

<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
    <PropertyGroup>
        <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
        <OutputType>Exe</OutputType>
        <RootNamespace>ConsoleApplication1</RootNamespace>
        <AssemblyName>ConsoleApplication1</AssemblyName>
        <WarningLevel>4</WarningLevel>
    </PropertyGroup>
    <Choose>
        <When Condition=" '$(Configuration)'=='debug' ">
            <PropertyGroup>
                <DebugSymbols>true</DebugSymbols>
                <DebugType>full</DebugType>
                <Optimize>false</Optimize>
                <OutputPath>.\bin\Debug\</OutputPath>
                <DefineConstants>DEBUG;TRACE</DefineConstants>
            </PropertyGroup>
            <ItemGroup>
                <Compile Include="UnitTesting\*.cs" />
                <Reference Include="NUnit.dll" />
            </ItemGroup>
        </When>
        <When Condition=" '$(Configuration)'=='retail' ">
            <PropertyGroup>
                <DebugSymbols>false</DebugSymbols>
                <Optimize>true</Optimize>
                <OutputPath>.\bin\Release\</OutputPath>
                <DefineConstants>TRACE</DefineConstants>
            </PropertyGroup>
        </When>
        <Otherwise>
            <PropertyGroup>
                <DebugSymbols>true</DebugSymbols>
                <Optimize>false</Optimize>
                <OutputPath>.\bin\$(Configuration)\</OutputPath>
                <DefineConstants>DEBUG;TRACE</DefineConstants>
            </PropertyGroup>
        </Otherwise>
    </Choose>
    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>

另请参阅