Cibles de MSBuildMSBuild targets

Les cibles regroupent les tâches dans un ordre particulier et permet au processus de génération d’être factorisé en unités plus petites.Targets group tasks together in a particular order and allow the build process to be factored into smaller units. Par exemple, une cible peut supprimer tous les fichiers du répertoire de sortie pour préparer la génération, pendant qu’une autre compile les entrées pour le projet et les place dans le répertoire vide.For example, one target may delete all files in the output directory to prepare for the build, while another compiles the inputs for the project and places them in the empty directory. Pour plus d’informations sur les tâches, consultez Tâches MSBuild.For more information on tasks, see Tasks.

Déclarer des cibles dans le fichier projetDeclare targets in the project file

Les cibles sont déclarées dans le fichier projet avec l’élément Target.Targets are declared in a project file with the Target element. Par exemple, le code XML suivant crée une cible nommée Construct, qui appelle ensuite la tâche Csc avec le type d’élément Compile.For example, the following XML creates a target named Construct, which then calls the Csc task with the Compile item type.

<Target Name="Construct">  
    <Csc Sources="@(Compile)" />  
</Target>  

Tout comme les propriétés MSBuild, les cibles peuvent être redéfinies.Like MSBuild properties, targets can be redefined. Par exemple :For example,

<Target Name="AfterBuild" >  
    <Message Text="First occurrence" />  
</Target>  
<Target Name="AfterBuild" >  
    <Message Text="Second occurrence" />  
</Target>  

Si AfterBuild s’exécute, il affiche uniquement « Second occurrence ».If AfterBuild executes, it displays only "Second occurrence".

Ordre de génération des ciblesTarget build order

Les cibles doivent être classées si l’entrée d’une cible dépend de la sortie d’une autre.Targets must be ordered if the input to one target depends on the output of another target. Il existe plusieurs façons de spécifier l’ordre d’exécution des cibles.There are several ways to specify the order in which targets run.

  • Cibles initialesInitial targets

  • Cibles par défautDefault targets

  • Première cibleFirst target

  • Dépendances de cibleTarget dependencies

  • BeforeTargets et AfterTargets (MSBuild 4.0)BeforeTargets and AfterTargets (MSBuild 4.0)

Une cible n’est jamais exécutée deux fois au cours d’une même génération, même si une cible suivante de la génération en dépend.A target never runs twice during a single build, even if a subsequent target in the build depends on it. Une fois qu’une cible est exécutée, sa contribution à la génération est terminée.Once a target runs, its contribution to the build is complete.

Pour plus d’informations sur l’ordre de génération des cibles, consultez Ordre de génération des cibles.For details and more information about the target build order, see Target build order.

Traitement par lots des ciblesTarget batching

Un élément cible peut avoir un attribut Outputs qui spécifie des métadonnées au format suivant : %(<métadonnées>).A target element may have an Outputs attribute which specifies metadata in the form %(<Metadata>). Dans ce cas, MSBuild exécute la cible une fois pour chaque valeur unique de métadonnées, en regroupant par lot les éléments qui ont cette valeur de métadonnées.If so, MSBuild runs the target once for each unique metadata value, grouping or "batching" the items that have that metadata value. Par exemple :For example,

<ItemGroup>  
    <Reference Include="System.Core">  
      <RequiredTargetFramework>3.5</RequiredTargetFramework>  
    </Reference>  
    <Reference Include="System.Xml.Linq">  
      <RequiredTargetFramework>3.5</RequiredTargetFramework>  
    </Reference>  
    <Reference Include="Microsoft.CSharp">  
      <RequiredTargetFramework>4.0</RequiredTargetFramework>  
    </Reference>  
</ItemGroup>  
<Target Name="AfterBuild"  
    Outputs="%(Reference.RequiredTargetFramework)">  
    <Message Text="Reference:  
      @(Reference->'%(RequiredTargetFramework)')" />  
</Target>  

regroupe les éléments Reference selon leurs métadonnées RequiredTargetFramework.batches the Reference items by their RequiredTargetFramework metadata. La sortie de la cible ressemble à ceci :The output of the target looks like this:

Reference: 3.5;3.5  
Reference: 4.0  

Le traitement par lot des cibles est rarement utilisé dans les scénarios de génération réels.Target batching is seldom used in real builds. Le traitement par lot des tâches, en revanche, est plus courant.Task batching is more common. Pour plus d’informations, consultez l’article Batching (Traitement par lot MSBuild).For more information, see Batching.

Builds incrémentiellesIncremental builds

Les builds incrémentielles sont des builds optimisées qui permettent de ne pas exécuter les cibles dont les fichiers de sortie sont à jour par rapport à leurs fichiers d’entrée correspondants.Incremental builds are builds that are optimized so that targets with output files that are up-to-date with respect to their corresponding input files are not executed. Un élément cible peut avoir à la fois un attribut Inputs, qui indique les éléments que la cible attend comme entrée, et un attribut Outputs qui indique les éléments qu’il produit comme sortie.A target element can have both Inputs and Outputs attributes, indicating what items the target expects as input, and what items it produces as output.

Si tous les éléments de sortie sont à jour, MSBuild ignore la cible, ce qui accélère considérablement le processus de génération.If all output items are up-to-date, MSBuild skips the target, which significantly improves the build speed. C’est ce qu’on appelle une build incrémentielle de la cible.This is called an incremental build of the target. Si seuls certains fichiers sont à jour, MSBuild exécute la cible, sans exécuter ces fichiers.If only some files are up-to-date, MSBuild executes the target without the up-to-date items. C’est ce qu’on appelle une build incrémentielle partielle de la cible.This is called a partial incremental build of the target. Pour plus d’informations, consultez Builds incrémentielles.For more information, see Incremental builds.

Voir aussiSee also

Concepts MSBuild MSBuild concepts
Guide pratique pour utiliser la même cible dans plusieurs fichiers projetHow to: Use the same target in multiple project files