Найти родительский каталог MSBuildProjectDirectory

MSBuild 3.5

У меня есть следующая структура проекта:

trunk/MainSolution.sln
trunk/Build/MyBuild.Proj
trunk/Library/...
trunk/etc...

До сих пор я использовал следующее свойство, чтобы узнать корневую папку проекта:

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

Все отлично работало, пока я не попытался использовать задачу копирования, которая полагалась на этот путь. Он не разрешает правильно. Я в основном получаю что-то вроде этого, что недействительно:

C:\Projects\MyProject\Trunk\Build\..\CodeAnalysis\myfile.xml

В принципе, мне нужно получить полный путь для родителя (MSBuildProjectDirectory).

Ответ 1

Метаданные предметов - ваш друг!

<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>