2016-04-16 3 views
1

В настоящее время я упаковываю пакет nuget для своего code generator project, и я дошел до того, что включил исполняемый файл в каталог и цель сборки в этот процесс.Построение пути целевых инструментов

Частичное от 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> 

Содержание 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> 

Теперь, когда я установить пакет я вижу, что он включен в процесс сборки. К сожалению, путь к cgbr.exe недействителен, и я немного застрял. Конечно, я мог бы использовать $(SolutionDir)packages\CGbR.0.3\tools\cgbr.exe, но мне пришлось бы изменять его каждый раз, когда меняю версию.

Чтобы уточнить: мне нужен путь к пути к инструментам пакетов.

Edit: Найден related post

ответ

2

Вы, вероятно, хотите относительный путь к инструменту из файла целей. Есть номер predefined properties in msbuild. Возможно, наиболее полезным для этих сценариев является MSBuildThisFileDirectory, который возвращает полный путь к каталогу текущего файла proj. Пример:

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

Относительный путь хороший, но мне нужен относительный путь к моему каталогу пакетов nuget. – Toxantron

+0

@Toxantron Правильно, но в msbuild нет понятия «каталог пакетов nuget». Однако есть что-то для местоположения текущего файла, который находится внутри вашего каталога пакетов nuget. Если ваш файл proj находится в каталоге «build» пакета, тогда каталог пакета nuget «$ (MSBuildThisFileDirectory) ..», и вы можете найти что-нибудь оттуда. –

+0

Теперь я понял. Ты гений! Большое спасибо! ;) – Toxantron

Смежные вопросы