Guide pratique pour étendre le processus de génération Visual StudioHow to: Extend the Visual Studio build process

Le processus de génération Visual StudioVisual Studio est défini par une série de fichiers .targets MSBuildMSBuild importés dans votre fichier projet.The Visual StudioVisual Studio build process is defined by a series of MSBuildMSBuild .targets files that are imported into your project file. Parmi ces fichiers importés, Microsoft.Common.targets peut être étendu de manière à exécuter des tâches personnalisées à différentes étapes du processus de génération.One of these imported files, Microsoft.Common.targets, can be extended to allow you to run custom tasks at several points in the build process. Cet article décrit deux méthodes que vous pouvez utiliser pour étendre le processus de génération Visual StudioVisual Studio :This article explains two methods you can use to extend the Visual StudioVisual Studio build process:

  • Substitution de cibles spécifiques prédéfinies dans Microsoft.Common.targets.Overriding specific predefined targets defined in Microsoft.Common.targets.

  • Substitution de propriétés DependsOn définies dans Microsoft.Common.targets.Overriding the "DependsOn" properties defined in Microsoft.Common.targets.

Substituer des cibles prédéfiniesOverride predefined targets

Le fichier Microsoft.Common.targets contient un ensemble de cibles vides prédéfinies qui sont appelées avant et après certaines cibles majeures du processus de génération.The Microsoft.Common.targets file contains a set of predefined empty targets that is called before and after some of the major targets in the build process. Par exemple, MSBuildMSBuild appelle la cible BeforeBuild avant la cible principale CoreBuild et appelle la cible AfterBuild après la cible CoreBuild.For example, MSBuildMSBuild calls the BeforeBuild target before the main CoreBuild target and the AfterBuild target after the CoreBuild target. Par défaut, les cibles vides de Microsoft.Common.targets ne font rien, mais vous pouvez remplacer leur comportement par défaut en définissant les cibles de votre choix dans un fichier projet qui importe Microsoft.Common.targets.By default, the empty targets in Microsoft.Common.targets do nothing, but you can override their default behavior by defining the targets you want in a project file that imports Microsoft.Common.targets. En substituant les cibles prédéfinies, vous pouvez utiliser les tâches MSBuildMSBuild pour avoir plus de contrôle sur le processus de génération.By overriding the predefined targets, you can use MSBuildMSBuild tasks to give you more control over the build process.

Pour substituer une cible prédéfinieTo override a predefined target

  1. Identifiez une cible prédéfinie dans Microsoft.Common.targets que vous souhaitez remplacer.Identify a predefined target in Microsoft.Common.targets that you want to override. Consultez le tableau ci-dessous pour obtenir la liste complète des cibles que vous pouvez substituer en toute sécurité.See the table below for the complete list of targets that you can safely override.

  2. Définissez la ou les cibles à la fin de votre fichier projet, juste avant la balise </Project>.Define the target or targets at the end of your project file, immediately before the </Project> tag. Exemple :For example:

    <Project>  
        ...  
        <Target Name="BeforeBuild">  
            <!-- Insert tasks to run before build here -->  
        </Target>  
        <Target Name="AfterBuild">  
            <!-- Insert tasks to run after build here -->  
        </Target>  
    </Project>  
    
  3. Générez le fichier projet.Build the project file.

Le tableau suivant montre toutes les cibles de Microsoft.Common.targets que vous pouvez substituer en toute sécurité.The following table shows all of the targets in Microsoft.Common.targets that you can safely override.

Nom de la cibleTarget name DescriptionDescription
BeforeCompile, AfterCompileBeforeCompile, AfterCompile Les tâches insérées dans l’une de ces cibles sont exécutées avant ou après la compilation principale.Tasks that are inserted in one of these targets run before or after core compilation is done. La plupart des personnalisations sont effectuées dans l’une de ces deux cibles.Most customizations are done in one of these two targets.
BeforeBuild, AfterBuildBeforeBuild, AfterBuild Les tâches insérées dans l’une de ces cibles s’exécutent avant ou après tout le reste lors de la génération.Tasks that are inserted in one of these targets will run before or after everything else in the build. Remarque : Les cibles BeforeBuild et AfterBuild sont déjà définies dans les commentaires à la fin de la plupart des fichiers projet. Vous pouvez ainsi ajouter facilement des événements pré-build et post-build à votre fichier projet.Note: The BeforeBuild and AfterBuild targets are already defined in comments at the end of most project files, allowing you to easily add pre- and post-build events to your project file.
BeforeRebuild, AfterRebuildBeforeRebuild, AfterRebuild Les tâches insérées dans l’une de ces cibles sont exécutées avant ou après l’appel de la fonctionnalité de regénération principale.Tasks that are inserted in one of these targets run before or after the core rebuild functionality is invoked. L’ordre d’exécution des cibles dans Microsoft.Common.targets est le suivant : BeforeRebuild, Clean, Build, puis AfterRebuild.The order of target execution in Microsoft.Common.targets is: BeforeRebuild, Clean, Build, and then AfterRebuild.
BeforeClean, AfterCleanBeforeClean, AfterClean Les tâches insérées dans l’une de ces cibles sont exécutées avant ou après l’appel de la fonctionnalité de nettoyage principale.Tasks that are inserted in one of these targets run before or after the core clean functionality is invoked.
BeforePublish, AfterPublishBeforePublish, AfterPublish Les tâches insérées dans l’une de ces cibles sont exécutées avant ou après l’appel de la fonctionnalité de publication principale.Tasks that are inserted in one of these targets run before or after the core publish functionality is invoked.
BeforeResolveReference, AfterResolveReferencesBeforeResolveReference, AfterResolveReferences Les tâches insérées dans l’une de ces cibles sont exécutées avant ou après la résolution des références d’assembly.Tasks that are inserted in one of these targets run before or after assembly references are resolved.
BeforeResGen, AfterResGenBeforeResGen, AfterResGen Les tâches insérées dans l’une de ces cibles sont exécutées avant ou après la génération des ressources.Tasks that are inserted in one of these targets run before or after resources are generated.

Substituer des propriétés DependsOnOverride DependsOn properties

La substitution de cibles prédéfinies est un moyen facile d’étendre le processus de génération. Toutefois, étant donné que MSBuildMSBuild évalue la définition des cibles de manière séquentielle, il n’existe aucun moyen d’empêcher un autre projet qui importe votre projet de substituer les cibles que vous avez déjà substituées.Overriding predefined targets is an easy way to extend the build process, but, because MSBuildMSBuild evaluates the definition of targets sequentially, there is no way to prevent another project that imports your project from overriding the targets you already have overridden. Ainsi, par exemple, la dernière cible AfterBuild définie dans le fichier projet, une fois que tous les autres projets ont été importés, sera celle utilisée pour la génération.So, for example, the last AfterBuild target defined in the project file, after all other projects have been imported, will be the one that is used during the build.

Vous pouvez empêcher la substitution involontaire des cibles en substituant les propriétés DependsOn qui sont utilisées dans les attributs DependsOnTargets du fichier Microsoft.Common.targets.You can guard against unintended overrides of targets by overriding the DependsOn properties that are used in DependsOnTargets attributes throughout the Microsoft.Common.targets file. Par exemple, la cible Build contient une valeur d’attribut DependsOnTargets égale à "$(BuildDependsOn)".For example, the Build target contains a DependsOnTargets attribute value of "$(BuildDependsOn)". Prenez en compte ce qui suit :Consider:

<Target Name="Build" DependsOnTargets="$(BuildDependsOn)"/>  

Ce code XML indique que pour exécuter la cible Build, vous devez d’abord exécuter toutes les cibles spécifiées dans la propriété BuildDependsOn.This piece of XML indicates that before the Build target can run, all the targets specified in the BuildDependsOn property must run first. La propriété BuildDependsOn est définie de la manière suivante :The BuildDependsOn property is defined as:

<PropertyGroup>  
    <BuildDependsOn>  
        BeforeBuild;  
        CoreBuild;  
        AfterBuild  
    </BuildDependsOn>  
</PropertyGroup>  

Vous pouvez remplacer cette valeur de propriété en déclarant une autre propriété nommée BuildDependsOn à la fin de votre fichier projet.You can override this property value by declaring another property named BuildDependsOn at the end of your project file. En incluant la propriété BuildDependsOn précédente dans la nouvelle propriété, vous pouvez ajouter de nouvelles cibles au début et à la fin de la liste de cibles.By including the previous BuildDependsOn property in the new property, you can add new targets to the beginning and end of the target list. Exemple :For example:

<PropertyGroup>  
    <BuildDependsOn>  
        MyCustomTarget1;  
        $(BuildDependsOn);  
        MyCustomTarget2  
    </BuildDependsOn>  
</PropertyGroup>  

<Target Name="MyCustomTarget1">  
    <Message Text="Running MyCustomTarget1..."/>  
</Target>  
<Target Name="MyCustomTarget2">  
    <Message Text="Running MyCustomTarget2..."/>  
</Target>  

Les projets qui importent vos fichiers projet peuvent substituer ces propriétés sans remplacer les personnalisations que vous avez apportées.Projects that import your project files can override these properties without overwriting the customizations that you have made.

Pour substituer une propriété DependsOnTo override a DependsOn property

  1. Identifiez une propriété DependsOn prédéfinie dans Microsoft.Common.targets que vous souhaitez remplacer.Identify a predefined DependsOn property in Microsoft.Common.targets that you want to override. Consultez le tableau ci-dessous pour obtenir la liste des propriétés DependsOn qui sont communément substituées.See the table below for a list of the commonly overridden DependsOn properties.

  2. Définissez une autre instance de la ou des propriétés à la fin de votre fichier projet.Define another instance of the property or properties at the end of your project file. Incluez la propriété d’origine (par exemple $(BuildDependsOn)) dans la nouvelle propriété.Include the original property, for example $(BuildDependsOn), in the new property.

  3. Définissez vos cibles personnalisées avant ou après la définition de la propriété.Define your custom targets before or after the property definition.

  4. Générez le fichier projet.Build the project file.

Propriétés DependsOn communément substituéesCommonly overridden DependsOn properties

Nom de propriétéProperty name DescriptionDescription
BuildDependsOn Propriété à substituer si vous souhaitez insérer des cibles personnalisées avant ou après l’intégralité du processus de génération.The property to override if you want to insert custom targets before or after the entire build process.
CleanDependsOn Propriété à substituer si vous souhaitez nettoyer la sortie de votre processus de génération.The property to override if you want to clean up output from your custom build process.
CompileDependsOn Propriété à substituer si vous souhaitez insérer des processus personnalisés avant ou après l’étape de compilation.The property to override if you want to insert custom processes before or after the compilation step.

Voir aussiSee also

Intégration Visual Studio Visual Studio integration
Concepts MSBuild MSBuild concepts
Fichiers .targets.targets files