251 votes

Événement de post-génération Visual Studio - Copier vers l'emplacement du répertoire relatif

Sur une construction réussie, je souhaite copier le contenu du répertoire de sortie vers un autre emplacement, sous la même "base" du dossier. Ce dossier parent est un parent de la partie et peuvent varier en fonction de la Source des paramètres de Contrôle.

J'ai énuméré quelques-uns de la Macro, les valeurs disponibles pour moi ...

$(SolutionDir) = D:\GolbalDir\Version\AppName\Solution1\build

$(ProjectDir) = D:\GolbalDir\Version\AppName\Solution1\Version\ProjectA\

Je veux copier la Sortie Dir contenu dans le dossier suivant :

D:\GolbalDir\Version\AppName\Solution2\Projet\Dépendance

L'emplacement de la base "D:\GolbalDir\Version\AppName" doivent être récupérées à partir de l'une des macros ci-dessus. Cependant, aucun de la macro liste de valeurs seulement l'emplacement parent.

Comment puis-je extraire seulement l'emplacement de la base pour le poste de construire de commande de copie ?

324voto

Lucas B Points 3441

Voici ce que vous voulez mettre dans la ligne de commande de l’événement de post-construction du projet:

 copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"
 

EDIT: Ou si votre nom de cible est différent du nom du projet.

 copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
 

207voto

gbjbaanb Points 31045

Si aucun du TargetDir ou autres macros point au bon endroit, utiliser les «.. » répertoire pour revenir en arrière vers le haut de la hiérarchie des dossiers.

C’est à dire. Utilisation `` pour obtenir votre répertoire de base.


Pour la liste de toutes les macros, voir ici :

http://msdn.Microsoft.com/en-us/library/c02as0cs.aspx

43voto

ichiban Points 4568

Vous pouvez essayer :

13voto

drzaus Points 3344

Je pense que c'est lié, mais j'ai eu un problème lors de la construction d'directement à l'aide d' msbuild de la ligne de commande (à partir d'un fichier de commandes) par rapport à la construction à partir de l'intérieur de VS.

En utilisant quelque chose comme ce qui suit:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(remarque: start XCOPY plutôt que d' XCOPY utilisés pour contourner un problème d'autorisations, qui ont empêché la copie)

La macro $(SolutionDir) évalué à l' ..\ lors de l'exécution de msbuild à partir d'un fichier batch, ce qui a entraîné l' XCOPY échec d'une commande. Sinon il a bien fonctionné lors de construit à partir de Visual Studio. Confirmée à l'aide d' /verbosity:diagnostic pour voir le niveau de sortie.

À l'aide de la macro $(ProjectDir)..\ au lieu de cela, ce qui revient à la même chose, a bien fonctionné et a conservé le chemin d'accès complet à la fois de construire des scénarios.

4voto

Rihan Meij Points 1180

Ne serait-il pas logique d'utiliser msbuild directement? Si vous faites cela à chaque construction, alors vous pouvez ajouter une tâche msbuild à la fin? Si vous souhaitez juste pour voir si vous ne pouvez pas trouver une autre macro valeur qui n'est pas montré sur l'IDE de Visual Studio, vous pouvez basculer sur le msbuild options de diagnostic et qui va vous montrer toutes les variables que vous pouvez utiliser, ainsi que leur valeur actuelle.

Pour passer à visual studio, aller dans Outils/Options, puis faites défiler vers le bas de l'arborescence de la section Projets et de Solutions, développez-la et cliquez sur générer et Exécuter, au droit leur est une liste déroulante qui spécifient la sortie de la construction de verbosité, paramètre de diagnostic, va vous montrer ce que les autres macro valeurs que vous pouvez utiliser.

Parce que je ne sais pas trop à quel niveau vous voulez aller, et comment complexe que vous voulez construire votre être, cela peut vous donner une idée. Récemment, j'ai été faire des scripts de création, que même exécuter du code SQL dans le cadre de la construction. Si vous désirez avoir plus d'aide ou même des exemples de scripts de construction, faites le moi savoir, mais si c'est juste un petit processus que vous souhaitez exécuter à la fin de la construction, peut-être les script msbuild est un peu plus de tuer.

J'espère que ça aide Rihan

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