Bagikan melalui


Konstruksi kondisional MSBuild

MSBuild menyediakan mekanisme untuk salah satu/atau pemrosesan dengan elemen Pilih, Kapan, dan Sebaliknya.

Menggunakan elemen Pilih

Elemen Choose berisi serangkaian When elemen dengan Condition atribut yang diuji secara berurutan dari atas ke bawah hingga dievaluasi ke true. Jika lebih dari satu When elemen dievaluasi ke true, hanya elemen pertama yang digunakan. Elemen Otherwise , jika ada, dievaluasi jika tidak ada kondisi pada elemen yang When dievaluasi ke true.

Elemen Choose dapat digunakan sebagai elemen turunan dari elemen Project, When dan Otherwise. Elemen When dan Otherwise dapat memiliki elemen ItemGroup, PropertyGroup, atau Choose turunan.

Contoh

Contoh berikut menggunakan elemen Choose dan When untuk pemrosesan either/or. Properti dan item untuk proyek diatur tergantung pada nilai properti 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>

Dalam contoh ini, kondisi pada konstanta DEFINED_CONSTANT pengkompilasi digunakan. Definisi ini disertakan DefineConstants dalam properti . Ekspresi reguler digunakan untuk mencocokkan konstanta yang tepat dalam daftar yang dipisahkan titik koma.

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

Lihat juga