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>

Weitere Informationen