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 avec des options de génération différentes. 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. Vous pouvez également générer un projet pour qu’il s’exécute sur une plateforme spécifique comme x86 ou x64. Dans toutes ces situations, la plupart des options de génération restent identiques ; seules quelques options sont modifiées pour contrôler la configuration de build. Avec MSBuild, vous utilisez des propriétés et des conditions pour créer les différentes configurations de build.
L’élément Property
définit une variable qui est référencée plusieurs fois dans un fichier projet, par exemple l’emplacement d’un répertoire temporaire, ou définit les valeurs des propriétés qui sont utilisées dans plusieurs configurations, comme une version Debug et une version Release. Pour plus d’informations sur les propriétés, consultez Propriétés MSBuild.
Les propriétés permettent de modifier la configuration de votre build sans avoir à modifier le fichier projet. L’attribut Condition
des éléments Property
et PropertyGroup
vous permet de modifier la valeur des propriétés. Pour plus d’informations sur les conditions MSBuild, consultez la section Conditions.
Utilisez un attribut
Condition
dans un élémentPropertyGroup
semblable à ce qui suit :<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
Utilisez un attribut
Condition
dans un élémentProperty
semblable à ce qui suit :<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
Une fois que votre fichier projet est écrit pour accepter plusieurs configurations, vous devez être en mesure de modifier ces configurations à chaque fois que vous générez votre projet. MSBuild offre cette possibilité en permettant de spécifier des propriétés en ligne de commande à l’aide du commutateur -property ou -p switch.
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
Utilisez le commutateur -property ou -p plusieurs fois avec la propriété et les valeurs de propriétés, ou utilisez un commutateur -property ou -p et séparez les différentes propriétés par des points-virgules (;). 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 également considérées comme des propriétés et sont automatiquement incorporées par MSBuild. Pour plus d’informations sur l’utilisation des variables d’environnement, consultez Guide pratique pour utiliser des variables d’environnement dans une build.
La valeur de propriété spécifiée sur la ligne de commande est prioritaire sur toute valeur qui est définie pour la même propriété dans le fichier projet, et cette valeur du fichier projet est prioritaire sur la valeur d’une variable d’environnement.
Vous pouvez changer ce comportement à l’aide de l’attribut
TreatAsLocalProperty
dans une balise de projet. Pour les noms de propriété répertoriés avec cet attribut, la valeur de propriété qui est spécifiée sur la ligne de commande n’est pas prioritaire sur la valeur indiquée dans le fichier projet. Vous en trouverez un exemple plus loin dans cette rubrique.
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="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Sets the default flavor if 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 montre comment utiliser l’attribut TreatAsLocalProperty
. La propriété Color
a la valeur Blue
dans le fichier projet et la valeur Green
dans la ligne de commande. Avec TreatAsLocalProperty="Color"
dans la balise de projet, la propriété de ligne de commande (Green
) ne remplace pas la propriété qui est définie dans le fichier projet (Blue
).
Pour générer le projet, entrez la commande suivante :
msbuild colortest.proj -t:go -property:Color=Green
<Project xmlns="http://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
-->