如何在 MSBuild 的项目文件 csproj 中获取绝对路径

2023-10-22 09:58:13 浏览数 (2)

通常我们能够在 csproj 文件中仅仅使用相对路径就完成大多数的编译任务。但是有些外部命令的执行需要用到绝对路径,或者对此外部工具来说,相对路径具有不同的含义。这个时候,就需要将相对路径在 csproj 中转换为绝对路径来使用。

本文介绍如何在项目文件 csproj 中将一个相对路径转换为绝对路径。

在 MSBuild 4.0 中,可以在 csproj 中编写调用 PowerShell 脚本的代码,于是获取一个路径的绝对路径就非常简单:

1

undefined

具体到 csproj 的代码中,是这样的:

1 2 3 4 5 6

<Project> <PropertyGroup> <WalterlvRelativePath>$(OutputPath)</WalterlvRelativePath> <_WalterlvAbsolutePath>$(System.IO.Path::GetFullPath($(WalterlvRelativePath)))</_WalterlvAbsolutePath> </PropertyGroup> </Project>

这样,就可以使用 $(_WalterlvAbsolutePath) 属性来获取绝对路径。

你可以阅读我的其他篇博客了解到 $(OutputPath) 其实最终都会是相对路径:

  • 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - walterlv
  • 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀) - walterlv

参考资料

  • How can I get MSBUILD to evaluate and print the full path when given a relative path? - Stack Overflow
  • Demonstrates how you can convert a relative path to an absolute path in MSBuild

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/get-absolute-path-in-msbuild-targets.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected]) 。

0 人点赞