Bedingte Konstrukte in MSBuild

MSBuild stellt einen Mechanismus für die Entweder/Oder-Verarbeitung mit den Elementen Choose, When und Otherwise bereit.

Verwenden des Elements „Choose“

Das Choose-Element enthält mehrere When-Elemente und Condition-Attribute, die in der Reihenfolge von oben nach unten getestet werden, bis eins true ergibt. Wenn mehr als ein When-Element true ergibt, wird nur das Erste verwendet. Falls ein Otherwise-Element vorhanden ist, wird es ausgewertet, wenn keine Bedingung für ein When-Element true ergibt.

Choose-Elemente können als untergeordnete Elemente der Elemente Project, When und Otherwise verwendet werden. Die Elemente When und Otherwise können über die untergeordneten Elemente ItemGroup, PropertyGroup und Choose verfügen.

Beispiel

Im folgenden Beispiel werden die Elemente Choose und When für die Entweder/Oder-Verarbeitung verwendet. Die Eigenschaften und Elemente für das Projekt werden anhand des Werts der Configuration-Eigenschaft festgelegt.

<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>

In diesem Beispiel wird eine Bedingung für eine Compilerkonstante DEFINED_CONSTANT verwendet. Diese ist in der DefinedConstants-Eigenschaft enthalten. Der reguläre Ausdruck wird verwendet, um die Konstante in einer durch Semikolons getrennten Liste genau abzugleichen.

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

Siehe auch