在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