В MSBuild 4.0, самый простой способ заключается в следующем :
$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\your\path'))
Этот метод работает даже если сценарий <Import>
в ред другой сценарий; путь относится к файлу, содержащему указанный выше код.
(консолидируются с Aaron's answer, а также последней части Sayed's answer)
В MSBuild 3.5, вы можете использовать ConvertToAbsolutePath задачу:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
DefaultTargets="Test"
ToolsVersion="3.5">
<PropertyGroup>
<Source_Dir>..\..\..\Public\Server\</Source_Dir>
<Program_Dir>c:\Program Files (x86)\Program\</Program_Dir>
</PropertyGroup>
<Target Name="Test">
<ConvertToAbsolutePath Paths="$(Source_Dir)">
<Output TaskParameter="AbsolutePaths" PropertyName="Source_Dir_Abs"/>
</ConvertToAbsolutePath>
<Message Text='Copying "$(Source_Dir_Abs)" to "$(Program_Dir)".' />
</Target>
</Project>
Соответствующий выход:
Project "P:\software\perforce1\main\XxxxxxXxxx\Xxxxx.proj" on node 0 (default targets).
Copying "P:\software\Public\Server\" to "c:\Program Files (x86)\Program\".
Немного длинный, если вы спросите меня, но он работает. Это будет относиться к «оригинальному» файлу проекта, поэтому, если его помещать внутри файла, который получает <Import>
ed, это не относится к этому файлу.
В MSBuild 2.0, есть подход, который не решает "..". Она тем не менее вести себя так же, как абсолютный путь:
<PropertyGroup>
<Source_Dir_Abs>$(MSBuildProjectDirectory)\$(Source_Dir)</Source_Dir_Abs>
</PropertyGroup>
$(MSBuildProjectDirectory) зарезервирован свойство всегда каталог скрипта, который содержит эту ссылку.
Это также будет относиться к «оригинальному» файлу проекта, поэтому, если он помещен в файл, который получает <Import>
ed, это не относится к этому файлу.
Я думаю, что метаданные FullPath применяются только к объектам, а не к свойствам . –
lesscode
2008-10-07 02:53:47
Я думаю, что вы правы, любой знает, как добраться от Имущества до полного/абсолютного пути? – 2008-10-07 02:55:14
Вы могли бы «любопытно» добраться туда, используя $ (ProjectDir) $ (Source_Dir), , но у вас было бы лишнее '..' – lesscode 2008-10-07 02:57:29