MSBuild терпит неудачу с двумя пакетами


Ладно, это фантастический баг. У меня есть решение 2012, которое выполняет MSBuild на сервере TFS 2012. Параметры, передаваемые в поле "Аргументы MSBuild" в шаблоне процесса сборки, выглядят следующим образом:

/п:DeployOnBuild=true в /п:PublishProfile=ProfileForProjectA /п:PublishProfile=ProfileForProjectB /p:VisualStudioVersion=11.0

И ошибка, которую я получаю обратно из TFS....

C:Program Файлы (x86)MSBuildMicrosoftVisualStudiov11.0WebMicrosoft.Сеть.Издательский.targets (4435): значение параметра PublishProfile равно 'ProfileForProjectA', ожидается, что файл будет найден по адресу 'C:Builds1SolutionSolutionSourcesSolutionProjectBPropertiesPublishProfilesProfileForProjectA.pubxml", но его не удалось найти.

Другими словами, Похоже, что сервер сборки ожидает каждый профиль публикации (*.pubxml) находиться в каждой папке PublishProfiles. Метод публикации для обоих проектов является "файловая система."

Единственное, что решает эту проблему для меня, - это добавление ProfileForProjectA в папку PublishProfiles для ProjectB и наоборот, но это не кажется очень элегантным решением. Может ли кто-нибудь воспроизвести такое поведение? У кого-нибудь есть более элегантная починка? Я что-то упустил?

Заранее благодарю.

1 8

1 ответ:

При передаче свойств через командную строку они являются глобальными свойствами MSBuild. Из-за этого они передаются каждому проекту в пределах a .файл sln. Веб-проекты-единственные, которые отвечают этим специфическим свойствам.

В вашем сценарии, если у вас есть два проекта, которые вы хотите построить+опубликовать в a .файл sln вам нужно будет создать профиль в каждом веб-проекте с тем же именем, скажем "MyProfile". Они не должны содержать одну и ту же информацию, каждый может иметь свою собственную уникальный набор настроек. Им просто нужно иметь общее имя.

Тогда, когда вы строите.

msbuild.exe mysolution.sln /p:DeployOnBuild=true /p:PublishProfile=MyProfile /p:VisualStudioVersion=11.0

При построении каждого веб-проекта будет вызван процесс публикации для MyProfile в этом проекте.

Если у вас есть сценарии, в которых вы хотите указать различные значения для PublishProfile, то вам нужно будет создать сценарий MSBuild вместо построения .файл sln. Есть несколько различных способов, которыми вы могли бы решить эту проблему, но все они включают в себя некоторые программа MSBuild.

Отказ от ответственности

Не используйте этот метод для живых серверов... но это здорово, если вы публикуете в промежуточном месте перед окончательной публикацией.

Если вы создаете+публикуете более 1 проекта в решении , вы можете опубликовать один проект, когда другой даже не строится. Это происходит потому, что процесс публикации на самом деле является расширением процесса сборки. Вот вам пример.

У вас есть ProjectA и ProjectB в решении, при сборке со свойствами выше ProjectA будет вызван и он будет строить и публиковать. Затем он перейдет к ProjectB, который будет строить и публиковать. Сборка для ProjectB может завершиться неудачей, и ProjectA будет уже опубликована.