Elemento When (MSBuild)

Specifica un blocco di codice selezionabile dall'elemento Choose.

<Scegli progetto><quando><scegli> ... <><In caso contrario><, scegliere> ...

Sintassi

<When Condition="'StringA'=='StringB'">
    <PropertyGroup>... </PropertyGroup>
    <ItemGroup>... </ItemGroup>
    <Choose>... </Choose>
</When>

Attributi ed elementi

Nelle sezioni seguenti vengono descritti gli attributi, gli elementi figlio e gli elementi padre.

Attributi

Attributo Descrizione
Condizione Attributo obbligatorio.

Condizione da valutare. Per altre informazioni, vedere Condizioni.

Elementi figlio

Elemento Descrizione
Scegliere Elemento facoltativo.

Valuta gli elementi figlio per selezionare una sezione del codice da eseguire. Possono esistere zero o più elementi Choose in un elemento When.
ItemGroup Elemento facoltativo.

Contiene un set di elementi Item definiti dall'utente. Possono esistere zero o più elementi ItemGroup in un elemento When.
PropertyGroup Elemento facoltativo.

Contiene un set di elementi Property definiti dall'utente. Possono esistere zero o più elementi PropertyGroup in un elemento When.

Elementi padre

Elemento Descrizione
Elemento Choose (MSBuild) Valuta gli elementi figlio per selezionare una sezione del codice da eseguire.

Osservazioni:

Se l'Condition attributo restituisce true, gli elementi figlio ItemGroup e PropertyGroup dell'elemento When vengono eseguiti e tutti gli elementi When successivi vengono ignorati.

Gli elementi Choose, When e Otherwise vengono usati insieme per consentire di selezionare una sezione di codice da eseguire tra diverse alternative. Per altre informazioni, vedere Costrutti condizionali di MSBuild.

Esempio

Nel progetto riportato di seguito l'elemento Choose viene usato per selezionare il set di valori delle proprietà da impostare negli elementi When. Se gli attributi Condition di entrambi gli elementi When restituiscono false, vengono impostati i valori delle proprietà dell'elemento Otherwise. Quando si esegue l'esempio, provare a passare varie impostazioni di proprietà dalla riga di comando, ad esempio msbuild myproj.proj -p:Configuration=Test;Platform=x86, e vedere l'aspetto del percorso di output. L'esempio presuppone che il requisito sia impostare determinate proprietà per le compilazioni di debug e rilascio, inclusa la cartella di output in base al livello di bit della piattaforma anziché al nome effettivo della piattaforma e supporta anche le configurazioni "Test" e "Retail", ma considerano "Retail" come "Release".

<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>

Vedi anche