Когда MSBuild устанавливает свойство $ (ProjectName)?

Я довольно новичок в MSBuild, и я сделал некоторые настройки для файла проекта Wpf, который я создаю как в VS2010, так и в TFS2010. Я настроил выходной путь следующим образом:

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

Это позволяет мне выполнять сборку в централизованный каталог двоичных файлов при сборке на рабочем столе и позволяет TFS находить двоичные файлы при выполнении сборок CI.

Однако, похоже, что в обоих случаях свойство $ (ProjectDir) оценивается как '' во время сборки, что приводит к странным результатам. При некоторой отладке создается впечатление, что $ (ProjectName) установлено ко времени выполнения BeforeBuild, но мое свойство OutputPath оценивает его до этого момента.

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

Предыдущее свойство находится в той же группе свойств, что и мое свойство OutputPath. В цели BeforeBuild $ (ProjectNameUsedTooEarly) оценивается как true, но $ (ProjectName) оценивает имя проекта как нормальное к этому моменту.

Что я могу сделать, чтобы убедиться, что $ (ProjectName) имеет значение при его использовании?

редактирование: я только что использовал MSBuild Sidekick Аттриса для отладки через мой файл сборки, и в самой первой цели, доступной для точки останова (_CheckForInvalidConfigurationAndPlatform), все свойства, кажется, уже установлены. ProjectName уже установлен правильно, но мое свойство OutputPath уже было установлено с использованием пустого значения ProjectName.

Ответы на вопрос(1)

Ваш ответ на вопрос