Короткая версия:
У меня есть проект MSBuild, который импортирует другой проект. В импортируемом проекте есть свойство, содержащее относительный путь относительно местоположения импортируемого проекта. Как мне преобразовать этот относительный путь в абсолютный? Я пытался выполнить задачу ConvertToAbsolutePath, но это делает ее относительно местоположения импортируемого проекта).
Длинная версия:
Я пытаюсь выполнить задачу MSBuild Роберта Коритника по интеграции вывода nunit в Visual Studio (см. этот другой SO-вопрос для ссылки). Поскольку мне нравится, что все мои инструменты находятся под контролем версий, я хочу, чтобы целевой файл с пользовательской задачей указывал на консольное приложение nunit, используя относительный путь.
Моя проблема в том, что этот относительный путь заканчивается относительно проекта импорта.
например. (в ... MyRepository \ Third Party \ NUnit \ MSBuild.NUnit.Task.Source \ bin \ Release \ MSBuild.NUnit.Task.Targets):
...
<PropertyGroup Condition="'$(NUnitConsoleToolPath)' == ''">
<NUnitConsoleToolPath>..\..\..\NUnit 2.5.5\bin\net-2.0</>
</PropertyGroup>
...
<Target Name="IntegratedTest">
<NUnitIntegrated
TreatFailedTestsAsErrors="$(NUnitTreatFailedTestsAsErrors)"
AssemblyName="$(AssemblyName)"
OutputPath="$(OutputPath)"
ConsoleToolPath="$(NUnitConsoleToolPath)"
ConsoleTool="$(NUnitConsoleTool)"
/>
</Target>
...
Указанная выше цель завершается неудачно с ошибкой, что файл не может быть найден (то есть файл nunit-console.exe). Внутри задачи NUnitIntegrated MSBuild при вызове метода execute () текущим каталогом является каталог проекта , импортирующего , поэтому относительные пути будут указывать на неправильное местоположение.
Я попытался преобразовать относительный путь в абсолютный, добавив следующие задачи в цель IntegratedTest:
<ConvertToAbsolutePath Paths="$(NUnitConsoleToolPath)">
<Output TaskParameter="AbsolutePaths" PropertyName="AbsoluteNUnitConsoleToolPath"/>
</ConvertToAbsolutePath>
но это просто преобразовало его в каталог файла проекта, который импортирует этот целевой файл.
Я знаю, что могу использовать свойство $(MSBuildProjectDirectory)
, чтобы получить каталог импортирующего проекта, но не могу найти никакого эквивалента для каталога импортированного целевого файла.
Может кто-нибудь сказать мне, как путь в импортированном файле, который должен быть относительно каталога, в котором находится импортируемый файл, может быть сделан абсолютным?
Спасибо!