When 元素 (MSBuild)

指定可能的代码块以供 Choose 元素选择。

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

特性和元素

以下几节描述了特性、子元素和父元素。

特性

特性

描述

Condition

必需的特性。

要计算的条件。 有关更多信息,请参见MSBuild 条件

子元素

元素

描述

Choose

可选元素。

通过计算子元素来选择要执行的代码块。 When 元素中可能有零个或零个以上的 Choose 元素。

ItemGroup

可选元素。

包含一组用户定义的 Item 元素。 When 元素中可能有零个或零个以上的 ItemGroup 元素。

PropertyGroup

可选元素。

包含一组用户定义的 Property 元素。 When 元素中可能有零个或零个以上的 PropertyGroup 元素。

父元素

元素

描述

Choose 元素 (MSBuild)

通过计算子元素来选择要执行的代码块。

备注

如果 Condition 特性的计算结果为 true,将执行 When 元素的 ItemGroupPropertyGroup 子元素,并跳过所有后续 When 元素。

通过将 ChooseWhenOtherwise 元素结合起来使用,可以从众多备选代码块中选择一个要执行的代码块。 有关更多信息,请参见MSBuild 的条件构造

示例

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

<Project
    xmlns="https://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>

请参见

参考

MSBuild 的条件构造

概念

MSBuild 项目文件架构引用