MSBuild 条件构造

MSBuild 为非此即彼的处理机制提供 ChooseWhenOtherwise 元素。

使用 Choose 元素

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

Choose 元素可用作 ProjectWhenOtherwise 元素的子元素。 WhenOtherwise 元素可具有 ItemGroupPropertyGroupChoose 子元素。

示例

以下示例使用 ChooseWhen 元素进行非此即彼的处理。 根据 Configuration 属性的值设置项目的属性和项。

<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>
    </Choose>
    <!-- Rest of Project -->
</Project>

在此示例中,使用了关于编译器常量 DEFINED_CONSTANT 的条件。 这些定义包含在属性中 DefineConstants 。 正则表达式用于匹配分号分隔列表中的确切常量。

<Choose>
   <When Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(
         $(DefineConstants), '^(.*;)*DEFINED_CONSTANT(;.*)*$'))">
      <!-- When DEFINED_CONSTANT is defined. -->
   </When>
   <!-- other conditions -->
</Choose>

请参阅