Visual Studio: plusieurs commandes post-build?

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 dans un même projet. En d’autres termes, je dois appeler deux commandes xcopy différentes à partir du même événement post-construction. Il semble que l’événement de post-construction ne prendra qu’une seule commande, et que si je dois appeler plusieurs commandes, je devrai placer les commandes dans un fichier * .bat et appeler cela depuis l’événement de 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.

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 d’un de mes projets.

Ligne de commande d'événement de post-construction

Important: Lors de l’exécution d’un fichier de commandes, vous devez utiliser l’instruction “call” dans l’ordre des lignes suivantes à exécuter. Si vous n’utilisez pas “call”, l’exécution entre dans le .bat et ne revient pas aux lignes suivantes. Identique à l’invite DOS.

par exemple:

call MyBatch1.bat call MyBatch2.bat 

Chaque commande doit être sur une ligne distincte. Ce que j’ai trouvé, c’est que s’il y a une erreur lors de l’exécution d’une de ces commandes, la post-construction entière échoue et vous devrez donc essayer chaque commande de post-build pour déboguer.

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 avec newlines: with && , si la commande précédente a échoué, next commant ne fonctionnera pas.

La séparation par newlines est plus facile à lire, vous devriez donc la préférer. Cependant, je connais au moins un cas où && est utile. C’est le scénario, lorsque vous utilisez des feuilles de propriétés pour avoir différentes étapes de post-génération sur des machines différentes. VS 2008 ne permet pas de définir directement PostBuildStep dans les feuilles de propriétés, mais vous pouvez append une macro utilisateur avec votre commande et l’appeler à partir des parameters principaux du projet. Une macro est une seule ligne, vous pouvez donc utiliser && pour y avoir plusieurs commandes.

Ajout à la réponse de womp :

Si vous avez plusieurs feuilles de propriétés à faire lors d’un même événement de construction, vous pouvez effectuer les opérations suivantes pour enchaîner les commandes:

 %(Command) echo foo 

%(Command) développe à la valeur précédente de la commande.

Personnellement, je le fais pour tous les événements de construction, même si je n’ai pas actuellement de commandes héritées, car cela garantit qu’il n’y aura aucun problème si j’ajoute plus tard des feuilles de propriétés.

Séparer les commandes avec & ou && ou; ne fonctionne pas dans VS2017. Ne peut pas croire une telle fonctionnalité simple n’est pas disponible dans VS2017. Visual Studio essaie d’exécuter l’intégralité du texte dans la fenêtre des événements post-build sous la forme d’une chaîne. La seule option pour moi maintenant est de créer un script batch que je n’aime pas particulièrement.

L’approche suggérée par womp fonctionne dans Visual Studio 2015/2017 (Windows), mais ne fonctionne pas dans Visual Studio pour Mac (Aperçu), qui semble exécuter uniquement la première des commandes. La seule approche que j’ai trouvée dans les versions Mac et Windows de Visual Studio consistait à chaîner 2 commandes MSBuild:

       

L’exemple ci-dessus utilise l’événement “AfterResolveReferences” mais devrait évidemment fonctionner aussi pour l’événement PostBuild.

Il n’y a pas de bonne solution à ce problème. L’idée d’appel provoque l’exécution d’autres scripts. J’ai remarqué que la détection des erreurs ne fonctionnerait pas. Mettez ‘exit / b 1’ dans FailMe.cmd. Utilisez ‘call FailMe.cmd’ dans les étapes de post-construction. Notez que la construction n’échoue pas? J’utilise VS 2017 pour construire un projet C #. Maintenant, essayez-le avec ‘FailMe.cmd’ La génération signale maintenant une erreur.

Il est donc préférable d’utiliser un seul script, si le signalement des erreurs est important.

Il suffit de préfixer “call” pour votre script batch. Ainsi, les instructions sous le script Batch sont également exécutées après le renvoi de l’appel à partir du script batch.

 call Script1.cmd call Script2.bat