MSBuild DeployOnBuild = true не публикуется - PullRequest
39 голосов
/ 11 февраля 2011

У меня есть веб-приложение Visual Studio 2010 MVC2, которое я создаю с помощью командной строки с использованием Hudson. Я хотел бы, чтобы Хадсон опубликовал веб-вывод, поэтому я добавил в свою командную строку теги DeployOnBuild = true и CreatePackageOnPublish = True.

Моя команда:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
   /target:Clean,Build 
   /property:Configuration=Debug;DeployOnBuild=True;CreatePackageOnPublish=True; 
   [my project name.csproj]

Выполнение этой команды на моей машине для разработки (Windows 7) успешно публикует веб-вывод на \obj\Debug\Package\PackageTmp\. Но его запуск на сервере Hudson (WS 2008) успешно компилируется, но не публикуется. Та же команда, та же версия MSBuild, тот же исходный код.

Я попробовал цель /t:Publish, которая дает мне ответ «Пропустить неопубликованный проект», как я видел на постах нескольких других людей.

Я также попытался добавить теги DeployOnBuild=True и CreatePackageOnPublish=True в файл моего проекта, но без изменений.

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

Ответы [ 4 ]

40 голосов
/ 23 февраля 2012

Если у вас не установлен Visual Studio 2010 на вашем сервере hudson, то, возможно, вы пропускаете файл публикации "target".После долгих ударов по столу я наконец-то решил это.

Уже довольно давно я знаю, что мне нужно скопировать каталог

C: \ Program Files(x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications

с моего локального компьютера с VS2010 на мой сервер, чтобы получить проект build .Но чтобы проект также мог опубликовать Мне нужно было также скопировать в каталог

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \Web

Примечание. В моем случае я фактически фиксирую эти папки в моем контроле исходного кода и изменяю значение <MSBuildExtensionsPath32> в моем файле csproj, чтобы оно указывало на эти извлеченные папки (так что на один шаг меньше)при подготовке сервера).Это не обязательно, чтобы заставить его работать, но вы можете рассмотреть это после того, как решите свою проблему.

ОБНОВЛЕНИЕ: Поэтому после того, как я сделал выше, сборка жаловалась, что не может найти «Microsoft».Web.Deployment.dll».Чтобы решить эту проблему, мне нужно было установить Microsoft Web Deploy v2.0 на сервере , хотя я только публикую в файловую систему .Наверное, я вижу в этом логику.

ОБНОВЛЕНИЕ: я обнаружил, что установка «Оболочки Visual Studio 2010 (интегрированная)» через установщик IIS Web Platform установит требуемые цели сборки.Похоже, это хороший компромисс между отсутствием всего установленного приложения Visual Studio на вашем сервере и ручным копированием, казалось бы, произвольных папок на ваш сервер с вашего компьютера разработчика.

3 голосов
/ 11 февраля 2011

Кажется, что условия для запуска цели публикации не выполнены.

1) У вас могут быть разные пути публикации

2) Условие для запуска цели публикации - false

Чтобы убедиться, что они оба вызывают вашу команду с флагом / v: diag . Найдите по Цель "Опубликовать" и попытайтесь выяснить, что на самом деле происходит. Это будет выглядеть как

Target "ExecuteT4Templates: (TargetId:144)" in file "D:\App\App.csproj" from project "D:\App\App.csproj":
Skipping target "ExecuteT4Templates" because all output files are up-to-date with respect to the input files.
Input files: D:\App\App.exe\\App_Config\Configuration.tt;D:\App\App.exe\\App_Config\Debug.App.tt;obj\\Debug.t4lastbuild
Output files: D:\App\App.exe\\App.config
Done building target "ExecuteT4Templates" in project "App.csproj".: (TargetId:144)
1 голос
/ 20 февраля 2013

В дополнение к ответу Брайана Хинчи я обнаружил, что мне также необходимо добавить мой пакетный вызов msbuild с дополнительным параметром VisualStudioVersion, чтобы указать правильную версию и путь к агенту сборки (в моем случае TeamCity) к Microsoft.WebApplication. цели будут называться. Без этого параметра шаг веб-развертывания и публикации не был завершен, и мой пакет успешно завершился с кодом 0, что значительно усложнило анализ - даже с флагом / verbosity, добавленным для «отладки» сборки. Это высказал САЙД ИБРАХИМ ХАШИМИ на своем сайте: http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

Сценарий для моего случая состоял в том, что у меня была включена совместимость с Visual Studio в моем веб-проекте MVC, чтобы я мог открыть проект в VS2010 или 2012 (как указано в примечаниях Сайда в приведенной выше ссылке) - так что я делаю локально в VS2012, тогда как агент сборки TeamCity имеет цели веб-сборки и развертывания VS 2010.

1 голос
/ 23 августа 2012

Занимался этим с VS2012 - в итоге установил инструменты веб-разработчика на сервер сборки, и это исправило.

...