Quando o MSBuild define a propriedade $ (ProjectName)?

Sou relativamente novo no MSBuild e fiz algumas customizações em um arquivo de projeto Wpf que estou criando no VS2010 e no TFS2010. Eu personalizei o caminho de saída da seguinte maneira:

<OutputPath Condition=" '$(TeamBuildOutDir)' == '' ">$(SolutionDir)build\binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
<OutputPath Condition=" '$(TeamBuildOutDir)' != '' ">$(TeamBuildOutDir)binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>

Isso permite criar em um diretório de binários centralizados ao criar na área de trabalho e permite que o TFS encontre os binários quando as compilações de IC estiverem em execução.

No entanto, parece que em ambos os casos, a propriedade $ (ProjectDir) está sendo avaliada como '' no momento da construção, o que cria resultados estranhos. Ao fazer alguma depuração, parece que $ (ProjectName) está definido no momento em que o BeforeBuild é executado, mas que minha propriedade OutputPath a está avaliando antes desse ponto.

<ProjectNameUsedTooEarly Condition=" '$(ProjectName)' == '' ">true</ProjectNameUsedTooEarly>

A propriedade anterior está no mesmo grupo de propriedades da minha propriedade OutputPath. No destino BeforeBuild, $ (ProjectNameUsedTooEarly) é avaliado como true, mas $ (ProjectName) é avaliado como o nome do projeto normalmente por esse ponto.

O que posso fazer para garantir que $ (ProjectName) tenha um valor quando eu o uso?

edit: Acabei de usar o MSBuild Sidekick da Attrice para depurar meu arquivo de compilação e, no primeiro destino disponível para o ponto de interrupção (_CheckForInvalidConfigurationAndPlatform), todas as propriedades parecem já estar definidas. ProjectName já está definido corretamente, mas minha propriedade OutputPath já foi definida usando o valor em branco de ProjectName.

questionAnswers(1)

yourAnswerToTheQuestion