70 votes

Comment puis-je obtenir le répertoire actuel dans un script MSBuild ?

Dans mon script MSBuild, j'ai besoin de passer le répertoire complet en tant que paramètre. Comment puis-je le récupérer ?

Exemple: Je lance le script depuis C:\dev, et je veux un chemin relatif, temp, donc je recherche C:\dev\temp.

Remarque : Je ne sais pas à partir de quel dossier le script sera exécuté.

0 votes

Est-ce que votre dossier temporaire sera toujours un sous-dossier de l'emplacement à partir duquel ce script doit être exécuté?

105voto

Sayed Ibrahim Hashimi Points 25707

Igor est assez proche. MSBuildProjectDirectory est la propriété qui vous donnera le chemin complet vers le fichier projet qui a été invoqué en ligne de commande. Donc, si vous avez les scripts suivants :

  • C:\temp\MyProj.proj
  • C:\shared\shared.targets

Et que MyProj.proj importe shared.targets et que celui-ci est passé à msbuild.exe, alors la valeur de MSBuildProjectDirectory sera toujours C:\temp même si vous y faites référence à l'intérieur de shared.targets. Si vos shared.targets nécessitent une connaissance du chemin, ceux-ci doivent être déclarés dans des propriétés connues. Par exemple, les fichiers de projet C# définissent la valeur pour OutputPath et le fichier partagé Microsoft.Common.targets utilise cette propriété.

Édition : MSBuild 4

Si vous utilisez MSBuild 4, vous pouvez également utiliser ces propriétés pour ce type de valeur.

  • MSBuildThisFile
  • MSBuildThisFileDirectory
  • MSBuildThisFileDirectoryNoRoot
  • MSBuildThisFileExtension
  • MSBuildThisFileFullPath
  • MSBuildThisFileName

Voir http://sedodream.com/2010/03/11/MSBuild40ReservedProperties.aspx.

4 votes

+1 notez que ces nouvelles propriétés réservées MSBuild 4 ne sont pas répertoriées dans la liste des macros dans la boîte de dialogue d'édition de Visual Studio 2010, même si elles sont prises en charge

0 votes

Ces propriétés MSBuild 4 sont très utiles.

59voto

granadaCoder Points 6390

Voici trois cibles qui sont utiles.

WhereAmI est celui que j'utilise pour essayer de trouver mon répertoire actuel bien sûr.

Les autres sont également informatives (certaines dépassent le cadre de la question).

Si vous utilisez un "fichier MSBuild externe" et que vous avez besoin de lui transmettre un nom de fichier ou un chemin (car les fichiers MSBuild externes n'aiment pas les fichiers relatifs s'ils ne se trouvent pas dans le même répertoire que le fichier .msbuild appelant)....voici une tâche pratique (je pense que c'est à partir de la version 3.5).

0 votes

Pourquoi utiliser dir . au lieu de cd?

0 votes

Dir '.' rapporte le répertoire. cd est change_directory et me déplacera hors du dossier. Je suppose que vous pourriez faire "cd ." mais je ne vois pas ce que cela vous apporte sur "dir '.'"....

1 votes

dir . imprime beaucoup plus que le répertoire de travail. dir '.' imprime un message d'erreur en plus du CWD car aucun tel fichier n'existe. CD sans argument affiche le chemin actuel sans le modifier. Je suppose que nous parlons de cmd ici, et non de ce qui se passerait si vous exécutiez votre script via xbuild ;-).

13voto

Igor Korkhov Points 4460

MSBuild a une propriété réservée appelée MSBuildProjectDirectory, qui correspond au chemin absolu du répertoire où se trouve votre projet ou fichier de script, C:\Dev dans votre cas. Par conséquent, "$(MSBuildProjectDirectory)\temp" est exactement ce que vous recherchez.

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