Passing property group value from one MsBuild task to another
There is a well known issue with properties and the CallTarget task. You should use DependsOnTargets instead.
<Target Name="Package">
<PropertyGroup>
<ReleasesDir>c:\tmp</ReleasesDir>
</PropertyGroup>
<Message Text="$(ReleasesDir)"/>
</Target>
<Target Name="PrePackage" DependsOnTargets="Package">
<CallTarget Targets="DoPackage" Condition="!Exists('$(ReleasesDir)')"/>
</Target>
<!-- Do the actual packaging -->
<Target Name="DoPackage" DependsOnTargets="Package">
<Message Text="Creating package in '$(ReleasesDir)'"/>
<Error Condition="'$(ReleasesDir)' == ''" Text="No ReleaseDir defined"/>
<MakeDir Directories="$(ReleasesDir)"/>
</Target>
It might not be the cleanest way to solve this problem, but if some one still wants to use CallTarget on the build file, he/she must define the PropertyGroup in another Target, the following is the solution to this weird problem.
<Target Name="DebugBuild" DependsOnTargets="DebugBuildProp">
<CallTarget Targets="CompileSolution"/>
</Target>
<Target Name="DebugBuildProp">
<PropertyGroup>
<Configuration>Debug</Configuration>
</PropertyGroup>
</Target>
<Target Name="CompileSolution">
<Message Text="$(Configuration)" />
</Target>