Property Functions: GetFolderPath
Today someone sent me an email asking how to call the System.Environment.GetFolderPath method passing in the value of MyDocuments for the value of the folder parameter. I was expecting the below to do the trick.
<Project ToolsVersion="4.0"
DefaultTargets="Demo"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Tempfile02>$([System.Environment]::GetFolderPath(System.Environment.SpecialFolder.MyDocuments))</Tempfile02>
</PropertyGroup>
<Target Name="Demo">
<Message Text="TempFile01: $(TempFile02)"/>
</Target>
</Project>
To my surprise I was faced with the following error.
Build started 3/20/2011 6:20:36 PM.
Project "C:\temp\_NET\msbuild\PropFunction01.proj" on node 1 (default targets).
C:\temp\_NET\msbuild\PropFunction01.proj(20,5): error MSB4186: Invalid static method invocation syntax: "[System.Environment]::GetFolderPath(System.Environment.Spec ialFolder.MyDocuments)". Requested value 'System.Environment.MyDocuments' was not found. Static method invocation should be of the form: $([FullTypeName]::Method()), e.g. $([System.IO.Path]::Combine(`a`, `b`)).
Done Building Project "C:\temp\_NET\msbuild\PropFunction01.proj" (default targets) -- FAILED.
Build FAILED.
So I sent an email to the MSBuild team asking “WTF why doesn’t this work?!”, and Dan Moseley (a lead dev there) sent me a snippet that worked, its below.
<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Tempfile02>$([System.Environment]::GetFolderPath(SpecialFolder.MyDocuments))</Tempfile02>
</PropertyGroup>
<Target Name="Demo">
<Message Text="TempFile01: $(TempFile02)"/>
</Target>
</Project>
In that snippet instead of using the fully qualified class name of System.Environment.SpecialFolder.MyDocuments, for some reason you have to use the shortened name of just SpecialFolder.MyDocuments. It seems like a bug to me, but at least there is a work around!
Resources
Sayed Ibrahim Hashimi – @sayedihashimi
Comments [3]
|
| My book on MSBuild and Team Build
|

![[RSS]](http://sedodream.com/images/feedButton.gif)