【问题标题】:get parent directory in MSBuild在 MSBuild 中获取父目录
【发布时间】:2011-06-07 21:46:25
【问题描述】:

在 NAnt 中,我有一个非常简单的属性来获取我的项目的根,它看起来像这样。:

<property
name="project.root.folder" 
value="${directory::get-parent-directory(directory::get-parent-directory(project.local.folder))}"
/>

这会将我带到我构建所有路径的项目的根目录。

在 MSBuild 中,我可以使用 $(MSBuildProjectDirectory) 获取当前目录,但我想获取父目录的完整路径。 NAnt 使用 directory::get-parent-directory,它很有魅力,我希望 MSBuild 中也有类似的东西。

我发现了一个以前的类似问题 (http://stackoverflow.com/questions/514264/msbuild-find-msbuildprojectdirectory-parent-directory),但我认为肯定有更简单的东西可用!

山姆:)

【问题讨论】:

  • 看起来像什么?啊哈,给你修好了!
  • 哈哈,不知道你是怎么做到的,但谢谢!
  • BAMBAM:缩进 4 个空格。

标签: .net msbuild nant


【解决方案1】:

我假设这是 MSBuild 4.0。你可以这样做:

<PropertyGroup>
     <RootFolder>$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))</RootFolder>
</PropertyGroup>
<Message Text="RootFolder: '$(RootFolder)'" />

【讨论】:

  • 好像是3.5版,不好意思,是时候升级了!
  • 这是 VS 2010 项目还是 2008 年项目?
  • 这不是把项目目录还给你吗?就像你使用 $(MSBuildProjectDirectory) 本身一样吗?
  • 不,System.IO.Path 不知道你是否给它一个目录或文件的路径,它对待它们是一样的。我将一个文件夹的完整路径传递给它,它会从其中剥离最低级别的文件夹,假设它是文件名,并给出上面的文件夹。试试看!
  • @Spider M9 - 我愿意,但我在另一个国家的树林中,使用 SDN-M,512k 带宽通过 SSH/SOCKS 隧道在系统上运行生成器。
【解决方案2】:

您发布的问题有您的答案,而且看起来还不错。 MSBuild 是围绕项目而不是解决方案构建的,因此找到可以为您提供解决方案路径的东西需要进行一些自定义。需要考虑的一个事实是,对于许多项目来说,解决方案文件并不位于项目树的根目录(或 MSBuild 用语中的“圆锥”)。

MSBuild Reserved Properties

【讨论】:

  • 这给了我路径 C:\GIT\NAntTest\build 并且我希望 C:\GIT\NAntTest 作为一个属性,这样我就可以将它用作我所有相对 URL 的起始块跨度>
  • BAMBAM - 哦,您想要完整的解决方案路径!知道了。 (假设项目与解决方案相关)。
猜你喜欢
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2011-04-21
  • 1970-01-01
  • 2018-06-18
  • 2011-01-07
  • 2012-01-15
相关资源
最近更新 更多