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