查找MSBuildProjectDirectory父目录

查找MSBuildProjectDirectory父目录,msbuild,Msbuild,MSBuild 3.5 我有以下项目结构: trunk/MainSolution.sln trunk/Build/MyBuild.Proj trunk/Library/... trunk/etc... 到目前为止,我一直在使用以下属性查找项目根文件夹: <RootFolder>$(MSBuildProjectDirectory)\..\</RootFolder> 因此,基本上,我需要获取(MSBuildProjectDirectory)父级的完整路径。项元数据是您的朋

MSBuild 3.5

我有以下项目结构:

trunk/MainSolution.sln
trunk/Build/MyBuild.Proj
trunk/Library/...
trunk/etc...
到目前为止,我一直在使用以下属性查找项目根文件夹:

<RootFolder>$(MSBuildProjectDirectory)\..\</RootFolder>

因此,基本上,我需要获取(MSBuildProjectDirectory)父级的完整路径。

项元数据是您的朋友

<Target Name="GetMSBuildProjectParentDirectory">
  <!-- First you create the MSBuildProject Parent directory Item -->
  <CreateItem Include="$(MSBuildProjectDirectory)\..\">
    <Output ItemName="MSBuildProjectParentDirectory" TaskParameter="Include"/>
  </CreateItem>

  <!-- You can now retrieve its fullpath using Fullpath metadata -->
  <Message Text="%(MSBuildProjectParentDirectory.Fullpath)"/>

  <!-- Create a property based on parent fullpath-->
  <CreateProperty Value="%(MSBuildProjectParentDirectory.Fullpath)">
    <Output PropertyName="CodeFolder" TaskParameter="Value"/>
  </CreateProperty>
</Target>


看起来很棒!你知道我如何使用它来创建一个带有路径的变量吗?e、 g.%(MSBuildParentDirectory.Fullpath),但显然这不起作用…在目标执行之前对属性进行评估,您必须使用CreateProperty任务(请参阅我的编辑)确定,那么您是说我必须使用CreateProperty任务?我问这个问题的原因是因为我目前有大约5个属性需要这个路径。e、 CodeFolder、DBFolder、DeployFolder等等…如果您绝对需要5个属性,是的,这就是我要说的。
<Target Name="GetMSBuildProjectParentDirectory">
  <!-- First you create the MSBuildProject Parent directory Item -->
  <CreateItem Include="$(MSBuildProjectDirectory)\..\">
    <Output ItemName="MSBuildProjectParentDirectory" TaskParameter="Include"/>
  </CreateItem>

  <!-- You can now retrieve its fullpath using Fullpath metadata -->
  <Message Text="%(MSBuildProjectParentDirectory.Fullpath)"/>

  <!-- Create a property based on parent fullpath-->
  <CreateProperty Value="%(MSBuildProjectParentDirectory.Fullpath)">
    <Output PropertyName="CodeFolder" TaskParameter="Value"/>
  </CreateProperty>
</Target>