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, akan dievaluasi jika tidak ada kondisi pada elemen When yang 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. Ini termasuk dalam DefinedConstants 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>

Baca juga