When-Element (MSBuild)
Gibt einen möglichen Codeblock an, den das Choose
-Element auswählen kann.
<Projekt><Auswählen><Wenn><Auswählen> ... < Andernfalls><Auswählen> ...
Syntax
<When Condition="'StringA'=='StringB'">
<PropertyGroup>... </PropertyGroup>
<ItemGroup>... </ItemGroup>
<Choose>... </Choose>
</When>
Attribute und Elemente
In den folgenden Abschnitten werden Attribute sowie untergeordnete und übergeordnete Elemente beschrieben.
Attribute
Attribut | Beschreibung |
---|---|
Bedingung | Erforderliches Attribut. Die auszuwertende Bedingung. Weitere Informationen finden Sie unter Conditions (MSBuild-Bedingungen). |
Untergeordnete Elemente
Element | Beschreibung |
---|---|
Auswählen | Optionales Element. Wertet untergeordnete Elemente aus, um einen auszuführenden Codeabschnitt auszuwählen. Es kann keine oder mehrere Choose -Elemente in einem When -Element geben. |
ItemGroup | Optionales Element. Enthält eine Reihe von benutzerdefinierten Item-Elementen. Es kann keine oder mehrere ItemGroup -Elemente in einem When -Element geben. |
PropertyGroup | Optionales Element. Enthält eine Reihe von benutzerdefinierten Eigenschaft-Elementen. Es kann keine oder mehrere PropertyGroup -Elemente in einem When -Element geben. |
Übergeordnete Elemente
Element | Beschreibung |
---|---|
Choose-Element (MSBuild) | Wertet untergeordnete Elemente aus, um einen auszuführenden Codeabschnitt auszuwählen. |
Bemerkungen
Wenn das Condition
-Attribut TRUE ergibt, werden die untergeordneten Elemente ItemGroup
und PropertyGroup
des When
-Elements ausgeführt, und alle nachfolgenden When
-Elemente werden übersprungen.
Die Elemente Choose
, When
und Otherwise
werden zusammen verwendet, um eine Möglichkeit zu bieten, einen Codeabschnitt aus einer Reihe von möglichen Alternativen zur Ausführung auszuwählen. Weitere Informationen finden Sie unter Conditional Constructs (Bedingte Konstrukte).
Beispiel
Das folgende Projekt verwendet das Choose
-Element, um auszuwählen, welche Gruppe von Eigenschaftswerten in den When
-Elementen festgelegt werden soll. Wenn die Condition
-Attribute beider When
-Elemente false
ergeben, werden die Eigenschaftswerte im Otherwise
-Element festgelegt. Versuchen Sie beim Ausführen des Beispiels, verschiedene Eigenschafteneinstellungen in der Befehlszeile zu übergeben, beispielsweise msbuild myproj.proj -p:Configuration=Test;Platform=x86
, und sehen Sie sich den Ausgabepfad an. Im Beispiel wird vorausgesetzt, dass bestimmte Eigenschaften für Debug- und Releasebuilds festgelegt werden müssen, einschließlich des Ausgabeordners, der auf der Bitanzahl der Plattform und nicht auf dem tatsächlichen Plattformnamen basiert, und dass die Konfigurationen „Test“ und „Retail“ unterstützt werden, wobei „Retail“ als „Release“ behandelt wird.
<Project>
<PropertyGroup>
<Configuration Condition="$(Configuration) == ''">Debug</Configuration>
<Platform Condition="$(Platform) == ''">x64</Platform>
</PropertyGroup>
<Choose>
<When Condition="$(Configuration)=='Test'">
<PropertyGroup>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<Choose>
<When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
<PropertyGroup>
<OutputPath>.\bin\Test\32-bit\</OutputPath>
</PropertyGroup>
</When>
<When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
<PropertyGroup>
<OutputPath>.\bin\Test\64-bit\</OutputPath>
</PropertyGroup>
</When>
<!-- For any other platform, use the platform name -->
<Otherwise>
<PropertyGroup>
<OutputPath>.\bin\Test\$(Platform)\</OutputPath>
</PropertyGroup>
</Otherwise>
</Choose>
</When>
<When Condition="$(Configuration)=='Retail' Or $(Configuration)=='Release'">
<PropertyGroup>
<DebugSymbols>false</DebugSymbols>
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<Choose>
<When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
<PropertyGroup>
<OutputPath>.\bin\Release\32-bit\</OutputPath>
</PropertyGroup>
</When>
<When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
<PropertyGroup>
<OutputPath>.\bin\Release\64-bit\</OutputPath>
</PropertyGroup>
</When>
<!-- For any other platform, use the platform name -->
<Otherwise>
<PropertyGroup>
<OutputPath>.\bin\Release\$(Platform)\</OutputPath>
</PropertyGroup>
</Otherwise>
</Choose>
</When>
<!-- For any other configuration, use debug properties-->
<Otherwise>
<PropertyGroup>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<Choose>
<When Condition="$(Platform)=='x86' Or $(Platform)=='ARM32'">
<PropertyGroup>
<OutputPath>.\bin\$(Configuration)\32-bit\</OutputPath>
</PropertyGroup>
</When>
<When Condition="$(Platform)=='x64' Or $(Platform)=='ARM64'">
<PropertyGroup>
<OutputPath>.\bin\$(Configuration)\64-bit\</OutputPath>
</PropertyGroup>
</When>
</Choose>
</Otherwise>
</Choose>
<Target Name="ShowProperties">
<Message Text="DebugSymbols: $(DebugSymbols)"/>
<Message Text="Optimize: $(Optimize)"/>
<Message Text="DefineConstants: $(DefineConstants)"/>
<Message Text="OutputPath: $(OutputPath)"/>
</Target>
</Project>