gpt4 book ai didi

msbuild - 当给定相对路径时,如何让 MSBUILD 评估并打印完整路径?

转载 作者:行者123 更新时间:2023-12-03 01:17:09 26 4
gpt4 key购买 nike

如何让 MSBuild 在 <Message /> 中进行评估和打印给定相对路径的任务绝对路径?

属性组

<Source_Dir>..\..\..\Public\Server\</Source_Dir>
<Program_Dir>c:\Program Files (x86)\Program\</Program_Dir>

任务

<Message Importance="low" Text="Copying '$(Source_Dir.FullPath)' to '$(Program_Dir)'" />

输出

Copying '' to 'c:\Program Files (x86)\Program\'

最佳答案

在 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> 编辑的文件内,这将不会相对于该文件。

<小时/>

在 MSBuild 2.0 中,有一种方法无法解析“..”。然而,它的行为就像绝对路径一样:

<PropertyGroup>
<Source_Dir_Abs>$(MSBuildProjectDirectory)\$(Source_Dir)</Source_Dir_Abs>
</PropertyGroup>

$(MSBuildProjectDirectory) 保留属性始终是包含此引用的脚本的目录。

这也将相对于“原始”项目文件,因此如果放置在获取 <Import> 编辑的文件内,这将不会相对于该文件。

关于msbuild - 当给定相对路径时,如何让 MSBUILD 评估并打印完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/176931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com