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

En cas de construction réussie, je souhaite copier le contenu du répertoire de sortie vers un autre emplacement sous le même dossier “base” . Ce dossier parent est une partie relative et peut varier en fonction des parameters du contrôle de source.

J’ai énuméré quelques-unes des valeurs macro disponibles pour moi …

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

$ (ProjectDir) = D: \ GlobalDir \ Version \ NomAppli \ Solution1 \ Version \ ProjetA \

Je veux copier le contenu de Dir de sortie dans le dossier suivant:

D: \ GlobalDir \ Version \ NomAppli \ Solution2 \ Projet \ Dépendance

L’emplacement de base “D: \ GlobalDir \ Version \ AppName” doit être extrait de l’une des macros ci-dessus. Cependant, aucune des valeurs de macro ne répertorie uniquement l’emplacement parent.

Comment puis-je extraire uniquement l’emplacement de base pour la commande de copie post-build?

Si aucun des TargetDir ou autres macros ne pointe vers le bon endroit, utilisez le répertoire “..” pour remonter la hiérarchie des dossiers.

c’est à dire. Utilisez $(SolutionDir)\..\.. 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

Voici ce que vous voulez mettre dans la ligne de commande des événements 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" 

Tu pourrais essayer:

 $(SolutionDir)..\..\ 

Je pense que cela est lié, mais j’ai eu un problème lors de la construction directe en utilisant la ligne de commande msbuild (à partir d’un fichier de commandes) vs la construction à partir de VS.

En utilisant quelque chose comme ce qui suit:

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

(note: start XCOPY plutôt que XCOPY pour contourner un problème d’permissions empêchant la copie)

La macro $(SolutionDir) évaluée à ..\ lors de l’exécution de msbuild à partir d’un fichier de commandes, entraînant l’échec de la commande XCOPY . Cela a bien fonctionné avec Visual Studio. Confirmé en utilisant /verbosity:diagnostic pour voir la sortie évaluée.

Utiliser la macro $(ProjectDir)..\ place, ce qui revient au même, fonctionnait bien et conservait le chemin complet dans les deux scénarios de construction.

Ne serait-il pas logique d’utiliser directement msbuild? Si vous faites cela avec chaque construction, vous pouvez append une tâche msbuild à la fin? Si vous souhaitez simplement voir si vous ne trouvez pas une autre valeur de macro qui n’est pas affichée sur l’EDI de Visual Studio, vous pouvez activer les options msbuild pour diagnostiquer et vous afficher toutes les variables que vous pourriez utiliser, comme ainsi que leur valeur actuelle.

Pour l’activer dans Visual Studio, allez dans Outils / Options, puis faites défiler l’arborescence jusqu’à la section intitulée Projets et solutions, développez-la et cliquez sur Construire et exécuter. À droite, vous trouverez un menu déroulant spécifiant la sortie de construction. , en définissant cela sur diagnostic, vous verrez quelles autres valeurs de macro vous pourriez utiliser.

Parce que je ne sais pas trop à quel niveau vous souhaitez aller et à quel point vous voulez que votre construction soit complexe, cela pourrait vous donner une idée. J’ai récemment fait des scripts de construction, qui exécutent même du code SQL dans le cadre de la construction. Si vous voulez de l’aide ou des exemples de scripts de construction, faites-le moi savoir, mais si c’est juste un petit processus que vous voulez exécuter à la fin de la construction, le script msbuild complet est peut-être un peu exagéré. .

J’espère que ça aide Rihan