Comment : générer les mêmes fichiers sources avec des options différentes
Lorsque vous générez des projets, vous compilez fréquemment les mêmes composants différentes options de génération.Par exemple, vous pouvez créer une version debug avec des informations de symbole, ou une version release sans informations de symbole mais avec les optimisations activées.Ou vous pouvez générer un projet pour l'exécuter sur une plateforme spécifique, comme x86 ou x64.Dans tous ces cas, la plupart des options de génération demeurent les mêmes ; seules quelques options sont changées pour contrôler la configuration de la génération.Avec MSBuild, vous utilisez des propriétés et des conditions pour créer les différentes configurations de build.
Utilisation des propriétés pour modifier les projets
L'élément Property définit une variable qui est référencée plusieurs fois dans un fichier projet, comme l'emplacement d'un répertoire temporaire, ou pour définir les valeurs des propriétés utilisées dans plusieurs configurations, comme les générations debug ou release.Pour plus d'informations sur les propriétés, consultez Propriétés MSBuild.
Vous pouvez utiliser les propriétés pour modifier la configuration de votre build sans changer le fichier projet.L'attribut Condition de l'élément Property et l'élément PropertyGroup vous permettent de modifier la valeur des propriétés.Pour plus d'informations sur les conditions MSBuild, consultez Conditions MSBuild.
Pour définir un groupe de propriétés à partir d'une autre propriété
Utilisez un attribut Condition dans un élément PropertyGroup similaire aux éléments suivants :
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
Pour définir une propriété à partir d'une autre propriété
Utilisez un attribut Condition dans un élément Property similaire aux éléments suivants :
<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
Spécification de propriétés sur la ligne de commande
Une fois que votre fichier projet est écrit pour accepter plusieurs configurations, vous devez pouvoir modifier ces configurations chaque fois que vous générez votre projet.MSBuild fournit cette capacité en permettant de spécifier des propriétés sur la ligne de commande à l'aide du commutateur /property ou /p.
Pour définir une propriété de projet sur la ligne de commande
Utilisez le commutateur /property avec la propriété et la valeur de propriété.Par exemple :
msbuild file.proj /property:Flavor=Debug
- ou -
Msbuild file.proj /p:Flavor=Debug
Pour spécifier plusieurs propriétés de projet sur la ligne de commande
Utilisez plusieurs fois le commutateur /property ou /p avec la propriété et les valeurs de propriété, ou utilisez un commutateur /property ou /p et séparez les propriétés par un point-virgule (;).Par exemple :
msbuild file.proj /p:Flavor=Debug;Platform=x86
- ou -
msbuild file.proj /p:Flavor=Debug /p:Platform=x86
Les variables d'environnement sont aussi traitées comme propriétés et automatiquement intégrées par MSBuild.Pour plus d'informations sur l'utilisation des variables d'environnement, consultez Comment : utiliser des variables d'environnement dans une génération.
La valeur de propriété spécifiée sur la ligne de commande a priorité sur toute valeur définie pour la même propriété dans le fichier projet, et cette valeur du fichier projet a elle-même priorité sur la valeur d'une variable d'environnement.
Vous pouvez modifier ce comportement en utilisant l'attribut d' TreatAsLocalProperty dans une balise de projet.Pour les noms de propriété qui sont répertoriés avec cet attribut, la valeur de propriété spécifiée sur la ligne de commande n'a pas prioritaire sur la valeur dans le fichier projet.Vous pouvez rechercher un exemple plus loin dans cette rubrique.
Exemple
L'exemple de code suivant, le projet « Hello World », contient deux nouveaux groupes de propriétés qui peuvent être utilisés pour créer une version debug et une version release.
Pour générer la version debug de ce projet, tapez :
msbuild consolehwcs1.proj /p:flavor=debug
Pour générer la version commerciale de ce projet, tapez :
msbuild consolehwcs1.proj /p:flavor=retail
<Project DefaultTargets = "Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<!-- Sets the default flavor of an environment variable called
Flavor is not set or specified on the command line -->
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
</PropertyGroup>
<!-- Define the DEBUG settings -->
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
<DebugType>full</DebugType>
<Optimize>no</Optimize>
</PropertyGroup>
<!-- Define the RETAIL settings -->
<PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
<DebugType>pdbonly</DebugType>
<Optimize>yes</Optimize>
</PropertyGroup>
<!-- Set the application name as a property -->
<PropertyGroup>
<appname>HelloWorldCS</appname>
</PropertyGroup>
<!-- Specify the inputs by type and file name -->
<ItemGroup>
<CSFile Include = "consolehwcs1.cs"/>
</ItemGroup>
<Target Name = "Compile">
<!-- Run the Visual C# compilation using input files
of type CSFile -->
<CSC Sources = "@(CSFile)"
DebugType="$(DebugType)"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe" >
<!-- Set the OutputAssembly attribute of the CSC
task to the name of the executable file that is
created -->
<Output TaskParameter="OutputAssembly"
ItemName = "EXEFile" />
</CSC>
<!-- Log the file name of the output file -->
<Message Text="The output file is @(EXEFile)"/>
</Target>
</Project>
L'exemple suivant indique comment utiliser l'attribut d' TreatAsLocalProperty .La propriété d' Color a une valeur d' Blue dans le fichier projet et d' Green dans la ligne de commande.Avec TreatAsLocalProperty="Color" dans la balise de projet, la propriété de ligne de commande (Green) ne substitue pas la propriété qui est définie dans le fichier projet (Blue).
Pour générer le projet, sélectionnez la commande suivante :
msbuild colortest.proj /t:go /property:Color=Green
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" TreatAsLocalProperty="Color">
<PropertyGroup>
<Color>Blue</Color>
</PropertyGroup>
<Target Name="go">
<Message Text="Color: $(Color)" />
</Target>
</Project>
<!--
Output with TreatAsLocalProperty="Color" in project tag:
Color: Blue
Output without TreatAsLocalProperty="Color" in project tag:
Color: Green
-->