'Find MSBuildProjectDirectory Parent Directory

MSBuild 3.5

I have the following project structure:

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

So far, I've been using the following property to find out the project root folder:

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

Everything was working great, until I tried using a copy task that relied on this path. It is not resolving correctly. I basically end up getting something like this which is not valid:

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

So basically, I need to get the full path for (MSBuildProjectDirectory)'s Parent.



Solution 1:[1]

Nowadays with MSBuild 4.0 and above you don't want to use CreateItem or CreateProperty tasks anymore. What you are asking for can be solved easily with msbuild property functions:

<!-- Prints the parent directory's full path. -->
$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..'))

If you just want to read the parent directory's folder name you can combine the above statement with the GetFileName property function:

$([System.IO.Path]::GetFileName('$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)\..'))'))

A bit verbose but much better than the other answer as this works outside of targets and can be assigned to a property.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Viktor Hofer