MSBuild 條件式建構

MSBuild 提供搭配使用 ChooseWhenOtherwise 元素的二擇一處理機制。

使用 Choose 元素

Choose 項目包含一系列的 When 項目與 Condition 屬性,其會按由上到下的順序進行測試,直到其中一個項目評估為 true 為止。 如果有一個以上的 When 項目評估為 true,則只會使用第一個項目。 如果 When 項目上沒有任何條件評估為 true,則會評估 Otherwise 項目 (如果有的話)。

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 的條件。 這些包含在 DefinedConstants 屬性中。 規則運算式用來比對分號分隔清單中的確切常數。

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

另請參閱