Udostępnij za pośrednictwem


Konstrukcje warunkowe programu MSBuild

Program MSBuild udostępnia mechanizm przetwarzania z elementami Wybierz, Kiedy i W przeciwnym razie .

Korzystanie z elementu Choose

Element Choose zawiera serię When elementów z atrybutamiCondition, które są testowane w kolejności od góry do dołu do momentu, aż zostanie obliczona wartość .true Jeśli więcej niż jeden When element zwróci wartość true, zostanie użyty tylko pierwszy element. Jeśli Otherwise element jest obecny, jest obliczany, jeśli żaden warunek elementu When nie daje wartości true.

Chooseelementy mogą być używane jako elementy podrzędne ProjectWhen elementów i .Otherwise When elementy i Otherwise mogą zawierać ItemGroupelementy podrzędne , PropertyGrouplub Choose .

Przykład

W poniższym przykładzie użyto Choose elementów i When do przetwarzania lub . Właściwości i elementy projektu są ustawiane w zależności od wartości Configuration właściwości.

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

W tym przykładzie jest używany warunek stałej kompilatora DEFINED_CONSTANT . Te definicje są zawarte we DefineConstants właściwości . Wyrażenie regularne jest używane do dopasowania dokładnej stałej na liście rozdzielanej średnikami.

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

Zobacz też