Condividi tramite


Costrutti condizionali di MSBuild

MSBuild fornisce un meccanismo per l'elaborazione con gli elementi Choose, When e Otherwise .

Usare l'elemento Choose

L'elemento Choose contiene una serie di elementi When con attributi Condition che vengono sottoposti a test in ordine dall'alto verso il basso finché un elemento restituisce true. Se più di un elemento When restituisce true, viene usato solo il primo. Un Otherwise elemento, se presente, viene valutato se nessuna condizione in un When elemento restituisce true.

Gli elementi Choose possono essere usati come elementi figlio degli elementi Project, When e Otherwise. Gli elementi When e Otherwise possono avere elementi figlio ItemGroup, PropertyGroup o Choose.

Esempio

L'esempio seguente usa gli elementi Choose e When per l'elaborazione either/or. Le proprietà e gli elementi per il progetto vengono impostati in base al valore della proprietà 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>

In questo esempio viene usata una condizione in una costante DEFINED_CONSTANT del compilatore. Queste definizioni sono incluse nella DefineConstants proprietà . L'espressione regolare viene utilizzata per trovare la corrispondenza con la costante esatta in un elenco delimitato da punto e virgola.

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

Vedi anche