Question

En cas de réussite de la création, je souhaite copier le contenu du répertoire de sortie dans un autre emplacement, dans le même dossier "base" . Ce dossier parent est une partie relative et peut varier en fonction des paramètres du contrôle de la source.

J'ai répertorié quelques-unes des valeurs de macro disponibles pour moi ...

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

$ (ProjectDir) = D: \ GlobalDir \ Version \ NomApp \ Solution1 \ Version \ ProjectA \

Je souhaite copier le contenu du répertoire de sortie dans le dossier suivant:

D: \ GlobalDir \ Version \ NomApp \ Solution2 \ Project \ Dependency

L'emplacement de base " D: \ GlobalDir \ Version \ AppName " doit être récupéré à partir de l’une des macros ci-dessus. Toutefois, aucune des valeurs de macro ne répertorie uniquement l'emplacement parent.

Comment puis-je extraire uniquement l'emplacement de base de la commande de copie post-génération?

Était-ce utile?

La solution

Si aucune des macros TargetDir ou autre ne pointe au bon endroit, utilisez l'option " .. " répertoire pour remonter dans 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

Autres conseils

Voici ce que vous souhaitez mettre dans la ligne de commande de l'événement post-génération 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"

Vous pouvez essayer:

$(SolutionDir)..\..\

Je pense que cela est lié, mais j'ai eu un problème lors de la création directe à l'aide de la ligne de commande msbuild (à partir d'un fichier de commandes) et d'une construction à partir de VS.

En utilisant quelque chose comme ceci:

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

(note: démarrez XCOPY plutôt que XCOPY utilisé pour contourner un problème d'autorisations empêchant la copie)

La macro $ (SolutionDir) évaluée en .. \ lors de l'exécution de msbuild à partir d'un fichier batch, entraînant l'échec de la commande XCOPY . Sinon, cela fonctionnait bien lorsqu'il était créé à partir de Visual Studio. Confirmez avec / verbosity: diagnostic pour voir le résultat évalué.

Utiliser la macro $ (ProjectDir) .. \ , ce qui revient au même, fonctionne parfaitement et conserve le chemin d'accès complet dans les deux scénarios de construction.

Ne serait-il pas logique d'utiliser msbuild directement? Si vous faites cela avec chaque build, vous pouvez alors ajouter une tâche msbuild à la fin? Si vous souhaitez simplement voir si vous ne pouvez pas trouver une autre valeur de macro qui ne soit pas affichée dans l'IDE de Visual Studio, vous pouvez activer les options msbuild pour le diagnostic et afficher toutes les variables que vous pouvez utiliser, comme ainsi que leur valeur actuelle.

Pour activer ceci dans visual studio, allez dans Outils / Options, puis faites défiler l'arborescence jusqu'à la section intitulée Projets et solutions, développez-le et cliquez sur Construire et exécuter, à droite, un menu déroulant spécifiant le construire la verbosité de sortie, en définissant cela sur diagnostic, vous montrera les autres valeurs de macro que vous pouvez utiliser.

Parce que je ne sais pas trop à quel niveau vous souhaitez aller, ni à 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 souhaitez plus d'aide ou même des exemples de scripts de génération, faites-le moi savoir, mais s'il ne s'agit que d'un petit processus que vous souhaitez exécuter à la fin de la génération, le traitement du script msbuild complet est peut-être un peu trop compliqué. .

J'espère que ça aide Rihan

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top