Я новичок в MSBuild, и я провел некоторую настройку файла проекта WPF, который создаю в Visual Studio 2010 и TFS 2010. Я настроил путь вывода следующим образом:
<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) было значение при его использовании?
Я просто использовал Attrice MSBuild Sidekick для отладки через мой файл сборки, и в самой первой цели, доступной для точки останова (_CheckForInvalidConfigurationAndPlatform), все свойства, похоже, уже установлены. ProjectName уже установлен правильно, но мое свойство OutputPath уже было установлено с использованием пустого значения ProjectName.