2011-06-07 50 views
7

在南特,我有一个非常简单的属性来获取我的项目的根,它看起来像这样...得到父目录中的MSBuild

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

这需要我,我的项目的根从我建立了我所有的路径。

在MSBuild中,我可以使用$(MSBuildProjectDirectory)来获取当前目录,但是我想要获取父目录的完整路径。 NAnt使用目录:: get-parent-directory作为一个魅力,并希望在MSBuild中有类似的东西。

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

山姆:)

+0

看起来像什么?啊哈,给你修好了! – alternative 2011-06-07 21:51:09

+0

哈哈,不知道你是怎么做到的,但谢谢! – samaspin 2011-06-07 21:55:42

+0

BAMBAM:缩进4个空格。 – alternative 2011-06-07 23:57:47

回答

13

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

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

似乎是3.5版本,耻辱,也许是它的升级时间! – samaspin 2011-06-07 22:19:30

+0

这是一个VS 2010项目,还是2008? – 2011-06-07 23:30:06

+0

这不就是给你的项目目录吗?就像您使用$(MSBuildProjectDirectory)本身一样? – 2011-06-08 00:26:41

0

您发布的问题有答案,它看起来是一个体面的一个。 MSBuild是围绕项目而建立的,而不是解决方案,因此寻找能够为您提供解决方案路径的东西需要一些定制。需要考虑的一个事实是,对于许多项目来说,解决方案文件不在项目树的根部(或MSBuild说法中的'cone')。

MSBuild Reserved Properties

+0

这给了我路径C:\ GIT \ NAntTest \ build,我想C:\ GIT \ NAntTest作为一个属性,所以我可以用它作为我所有相对URL的起始块 – samaspin 2011-06-07 21:55:12

+0

BAMBAM - 哦,你想要完整的解决方案路径!得到它了。 (假设该项目与解决方案相关)。 – 2011-06-08 00:25:27