108 votes

Visual Studio : Plusieurs commandes post-construction ?

Visual Studio 2008 me permet de déclarer une commande et de l'attacher à l'événement post-construction d'un projet. Comme beaucoup de développeurs, je l'utilise régulièrement pour copier des fichiers dans le répertoire de sortie de l'application.

Je travaille sur un projet où je dois copier des fichiers de deux endroits différents vers deux destinations différentes, le tout au sein d'un même projet. En d'autres termes, j'ai besoin d'invoquer deux commandes xcopy différentes à partir du même événement post-construction. Il semble que l'événement post-construction ne prenne qu'une seule commande, et que si j'ai besoin d'invoquer plusieurs commandes, je devrai placer les commandes dans un fichier *.bat et l'appeler à partir de l'événement post-construction.

Est-ce correct ou existe-t-il un moyen plus simple d'invoquer deux commandes à partir de l'événement post-construction ? Merci d'avance pour votre aide.

127voto

womp Points 71924

Vous pouvez saisir autant de commandes post-construction que vous le souhaitez. Il suffit de les séparer par des nouvelles lignes.

Voici un exemple tiré de l'un de mes projets.

Post Build Event Commandline

33 votes

Bien qu'elles soient sur des lignes séparées, mes commandes sont exécutées ensemble comme si elles étaient sur une seule ligne.

6 votes

Malheureusement, il semble qu'au moins VS2015 ne signale pas d'erreur si l'une des commandes intermédiaires échoue... il signale le résultat de la dernière commande comme résultat de l'étape de post-construction.

3 votes

Il semble que cela fonctionne à partir de Visual Studio - mais n'est pas pris en charge si vous utilisez MsBuild sur une machine de construction TFS. MsBuild supprime les sauts de ligne et fait échouer la commande en raison d'une mauvaise syntaxe.

115voto

huha Points 741

Important : lors de l'exécution d'un fichier batch, vous devez utiliser l'instruction "call" pour ordonner l'exécution des lignes suivantes. Si vous n'utilisez pas "call", l'exécution se fait dans le fichier .bat et ne revient pas aux lignes suivantes. Même chose qu'à l'invite du DOS.

par exemple :

call MyBatch1.bat
call MyBatch2.bat

3 votes

Cette astuce s'applique aux commandes grunt et npm puisqu'elles s'exécutent toutes deux via des fichiers batch (grunt.cmd et npm.cmd).

18voto

Steed Points 647

Il existe une autre option : vous pouvez séparer les commandes avec && . Par exemple

copy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2

Ce n'est pas exactement la même chose que la séparation par des nouvelles lignes : avec && Si la commande précédente a échoué, la commande suivante ne sera pas exécutée.

La séparation par des nouvelles lignes est plus facile à lire, c'est pourquoi vous devriez la préférer. Cependant, je connais au moins un cas où && est utile. C'est le cas lorsque vous utilisez les feuilles de propriétés pour avoir différentes étapes de post-construction sur différentes machines. VS 2008 ne permet pas de définir PostBuildStep directement dans les feuilles de propriétés, mais vous pouvez ajouter une macro utilisateur avec votre commande et l'appeler depuis les paramètres principaux du projet. Une macro est d'une seule ligne, vous pouvez donc utiliser && d'avoir plusieurs commandes à cet endroit.

11voto

Lisa Points 1261

Chaque commande doit figurer sur une ligne distincte. Ce que j'ai constaté, c'est que si une erreur se produit lors de l'exécution de l'une de ces commandes, l'ensemble de la post-construction échoue et vous devrez donc essayer chaque commande de post-construction une à la fois pour déboguer.

3 votes

"xcopy /f" affichera le nom complet du fichier source et du fichier cible, qui sera imprimé avant l'échec, ce qui rend les commandes xcopy multiples plus faciles à diagnostiquer que les commandes copy multiples.

7voto

Max Truxa Points 1510

Ajouter à womp 's répondre :

Si vous avez plusieurs feuilles de propriétés qui ont quelque chose à faire sur le même événement de construction, vous pouvez faire ce qui suit pour enchaîner les commandes :

%(Command)
echo foo

%(Command) reprend la valeur précédente de la commande.

Personnellement, je le fais pour tous même si je n'ai pas actuellement de commandes héritées, car cela garantit qu'il n'y aura pas de problèmes si j'ajoute des feuilles de propriété ultérieurement.

1 votes

Cela fonctionne également avec l'étape de construction personnalisée. De même, l'exécution d'un exit n'importe où le long de la chaîne entraîne l'interruption de celle-ci. En effet, l'instruction exit 1 entraîne l'échec de la construction, tandis que exit 0 interrompt simplement l'étape et la construction se poursuit.

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