2016-04-16 1 views
1

Je suis actuellement en train d'empaqueter un paquet de nuget pour mon code generator project et je suis allé jusqu'à inclure un exécutable dans le répertoire tools et une cible de construction dans le processus.Construire le chemin des outils cibles

partielle de la Nuspec

<files> 
    <file src="cgbr.targets" target="build\cgbr.targets" /> 
    <file src="cgbr.json" target="content\cgbr.json" /> 
    <file src="..\bin\CGbR.Lib.dll" target="lib\CGbR.Lib.dll" /> 
    <file src="..\bin\cgbr.exe" target="tools\cgbr.exe" /> 
</files> 

Contenu du fichier cgbr.targets

<?xml version="1.0" encoding="utf-8" ?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="BeforeBuild"> 
     <Exec Command="cgbr.exe $(ProjectDir)"/> 
    </Target> 
</Project> 

Maintenant, quand j'installer le paquet, je vois qu'il est inclus dans le processus de construction. Malheureusement, le chemin vers cgbr.exe est invalide et je suis un peu coincé. Bien sûr, je pourrais utiliser $(SolutionDir)packages\CGbR.0.3\tools\cgbr.exe mais que je devrais modifier à chaque fois que je change la version.

Pour clarifier: J'ai besoin du chemin vers le chemin d'outils de mon paquet.

Edit: a trouvé un related post

Répondre

2

Vous voulez probablement un chemin relatif à l'outil à partir du fichier des cibles. Il y a un certain nombre de predefined properties in msbuild. Peut-être le plus utile pour ces scénarios est MSBuildThisFileDirectory qui renvoie le chemin complet du répertoire du fichier proj actuel. Un exemple:

<Exec Command="&quot;$(MSBuildThisFileDirectory)..\tools\cgbr.exe&quot; &quot;$(ProjectDir)&quot;"/> 
+0

Le chemin relatif est bon, mais j'ai besoin d'un chemin relatif vers mon répertoire de paquetage de nuget. – Toxantron

+0

@Toxantron A droite, mais il n'y a pas de notion de "mon répertoire de paquets de nuget" dans msbuild. Il y a cependant quelque chose pour l'emplacement du fichier actuel, qui se trouve dans le répertoire de votre paquet nuget. Si votre fichier proj est dans le répertoire "build" du paquet, alors le répertoire du paquet nuget est "$ (MSBuildThisFileDirectory) .." et vous pouvez trouver n'importe quoi à partir de là. –

+0

Maintenant je l'ai. Tu es un génie! Merci beaucoup l'homme! ;) – Toxantron