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>