When 元素 (MSBuild)

更新:2007 年 11 月

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

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

属性和元素

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

属性

属性

说明

Condtition

必选的属性。

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

子元素

元素

说明

请选择

可选的元素。

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

ItemGroup

可选的元素。

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

PropertyGroup

可选的元素。

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

父元素

元素

说明

Choose 元素 (MSBuild)

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

备注

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

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

示例

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

<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 的条件构造