12 votes

Comment appeler une cible MSBuild surchargée ?

Dans MSBuild, vous pouvez remplacer un fichier <Target /> d'un autre fichier dans le vôtre. Par exemple, le AfterBuild cible incluse dans Microsoft.Common.targets en définissant simplement votre propre cible avec le même nom :

<Target Name="AfterBuild">
    <!-- Do something different -->
</TargetName>

Vous verrez une note comme celle-ci :

Remplacer la cible "AfterBuild" dans le projet " C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets "avec la cible "AfterBuild" du projet "XXXXX".

Existe-t-il un moyen d'appeler la cible originale d'AfterBuild ?

J'aimerais faire cela pour instrumenter certaines cibles complexes par défaut et ensuite exécuter le comportement original. De nombreuses cibles comme Build exposent une propriété BuildDependsOn qui peut être utilisée à cette fin. D'autres ne le font pas - et j'aimerais les remplacer sans dupliquer complètement leur contenu.

15voto

Sayed Ibrahim Hashimi Points 25707

Lorsqu'un MSBuild script est traité, il traitera également les fichiers importés. Le résultat sera une seule représentation canonique en mémoire de l'ensemble du script. Lorsque l'on rencontre une cible qui existe déjà, la définition précédente est écartée, il n'est donc pas possible d'appeler la cible originale.

0voto

Kjara Points 946

J'aimerais faire cela pour instrumenter certaines cibles complexes par défaut et ensuite exécuter le comportement original. De nombreuses cibles comme Build exposent une propriété BuildDependsOn qui peut être utilisée à cette fin. D'autres ne le font pas - et j'aimerais les remplacer sans dupliquer complètement leur contenu.

Si vous voulez d'abord exécuter quelque chose de personnalisé sur une cible et ensuite exécuter la cible originale, pourquoi ne pas simplement utiliser BeforeTargets ?

Ainsi, au lieu de

<Target Name="AfterBuild">
    <!-- custom AfterBuild overriding default AfterBuild -->
</TargetName>

utilisez simplement

<Target Name="JustBefore_AfterBuild" BeforeTargets="AfterBuild">
    <!-- custom AfterBuild just before default AfterBuild -->
</TargetName>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X