Guide pratique pour générer les mêmes fichiers sources avec des options différentesHow to: Build the same source files with different options

Lorsque vous générez des projets, vous compilez fréquemment les mêmes composants avec des options de génération différentes.When you build projects, you frequently compile the same components with different build options. 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.For example, you can create a debug build with symbol information or a release build with no symbol information but with optimizations enabled. Vous pouvez également générer un projet pour qu’il s’exécute sur une plateforme spécifique, par exemple x86 ou x64x64.Or you can build a project to run on a specific platform, such as x86 or x64x64. 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.In all these cases, most of the build options stay the same; only a few options are changed to control the build configuration. Avec MSBuildMSBuild, vous utiliser des propriétés et des conditions pour créer les différentes configurations de build.With MSBuildMSBuild, you use properties and conditions to create the different build configurations.

Utiliser des propriétés pour modifier des projetsUse properties to modify projects

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.The Property element defines a variable that is referenced several times in a project file, such as the location of a temporary directory, or to set the values for properties that are used in several configurations, such as a Debug build and a Release build. Pour plus d’informations sur les propriétés, consultez Propriétés MSBuild.For more information about properties, see MSBuild properties.

Les propriétés permettent de modifier la configuration de votre build sans avoir à modifier le fichier projet.You can use properties to change the configuration of your build without having to change the project file. L’attribut Condition des éléments Property et PropertyGroup vous permet de modifier la valeur des propriétés.The Condition attribute of the Property element and the PropertyGroup element allows you to change the value of properties. Pour plus d’informations sur les conditions MSBuildMSBuild, consultez l’article Conditions (Conditions MSBuild).For more information about MSBuildMSBuild conditions, see Conditions.

Pour définir un groupe de propriétés en fonction d’une autre propriétéTo set a group of properties based on another property

  • Utilisez un attribut Condition dans un élément PropertyGroup semblable à ce qui suit :Use a Condition attribute in a PropertyGroup element similar to the following:

    <PropertyGroup Condition="'$(Flavor)'=='DEBUG'">  
        <DebugType>full</DebugType>  
        <Optimize>no</Optimize>  
    </PropertyGroup>  
    

Pour définir une propriété en fonction d’une autre propriétéTo define a property based on another property

  • Utilisez un attribut Condition dans un élément Property semblable à ce qui suit :Use a Condition attribute in a Property element similar to the following:

    <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>  
    

Spécifier des propriétés sur la ligne de commandeSpecify properties on the command line

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.Once your project file is written to accept multiple configurations, you need to have the ability to change those configurations whenever you build your project. MSBuildMSBuild vous en donne la possibilité en permettant de spécifier des propriétés sur la ligne de commande à l’aide du commutateur /property ou /p. provides this ability by allowing properties to be specified on the command line using the /property or /p switch.

Pour définir une propriété de projet dans la ligne de commandeTo set a project property at the command line

  • Utilisez le commutateur /property avec la propriété et la valeur de la propriété.Use the /property switch with the property and property value. Exemple :For example:

    msbuild file.proj /property:Flavor=Debug  
    

    ouor

    Msbuild file.proj /p:Flavor=Debug  
    

Pour spécifier plusieurs propriétés de projet dans la ligne de commandeTo specify more than one project property at the command line

  • 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 plusieurs propriétés avec des points-virgules (;).Use the /property or /p switch multiple times with the property and property values, or use one /property or /p switch and separate multiple properties with semicolons (;). Exemple :For example:

    msbuild file.proj /p:Flavor=Debug;Platform=x86  
    

    ouor

    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 intégrées par MSBuildMSBuild.Environment variables are also treated as properties and are automatically incorporated by MSBuildMSBuild. Pour plus d’informations sur l’utilisation des variables d’environnement, consultez Guide pratique pour utiliser des variables d’environnement dans une build.For more information about using environment variables, see How to: Use environment variables in a 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.The property value that is specified on the command line takes precedence over any value that is set for the same property in the project file, and that value in the project file takes precedence over the value in an environment variable.

    Vous pouvez changer ce comportement à l’aide de l’attribut TreatAsLocalProperty dans une balise de projet.You can change this behavior by using the TreatAsLocalProperty attribute in a project tag. 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.For property names that are listed with that attribute, the property value that's specified on the command line doesn't take precedence over the value in the project file. Vous en trouverez un exemple plus loin dans cette rubrique.You can find an example later in this topic.

ExempleExample

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.The following code example, the "Hello World" project, contains two new property groups that can be used to create a Debug build and a Release build.

Pour générer la version Debug de ce projet, tapez :To build the debug version of this project, type:

msbuild consolehwcs1.proj /p:flavor=debug  

Pour générer la version commerciale de ce projet, tapez :To build the retail version of this project, type:

msbuild consolehwcs1.proj /p:flavor=retail  
<Project DefaultTargets = "Compile"  
    xmlns="http://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>  

ExempleExample

L’exemple suivant montre comment utiliser l’attribut TreatAsLocalProperty.The following example illustrates how to use the TreatAsLocalProperty attribute. La propriété Color a la valeur Blue dans le fichier projet et la valeur Green dans la ligne de commande.The Color property has a value of Blue in the project file and Green in the command line. 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).With TreatAsLocalProperty="Color" in the project tag, the command-line property (Green) doesn't override the property that's defined in the project file (Blue).

Pour générer le projet, entrez la commande suivante :To build the project, enter the following command:

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

Voir aussiSee also

MSBuildMSBuild
Concepts MSBuild MSBuild concepts
Informations de référence sur MSBuild MSBuild reference
Project, élément (MSBuild)Project element (MSBuild)