Веб-сайт ASP.NET "Публикация" по сравнению с проектом веб-развертывания

если я решил использовать параметр "публикация" для моего веб-сайта ASP.NET, вместо проекта веб-развертывания, могу ли я создавать пользовательские объекты msbuild? Или мне нужно придерживаться WDP, если я хочу делать пользовательские файлы msbuild во время компиляции/развертывания.

Ответы

Ответ 1

Я думаю о опции публикации как часть набора инструментов VS.NET для разработчиков, чтобы использовать для публикации веб-сайтов на машинах dev. На самом деле он не создан для реального развертывания.

Если вам нужны пользовательские действия, проект веб-развертывания будет более подходящим для реального развертывания, когда несколько человек, кроме разработчика, будут запускаться регулярно и которые вы хотите создать с каждой сборкой.

Я также рассмотрю три других варианта:

  • PowerShell: Хороший способ script для IIS, настройки веб-сайтов и т.д. Вы даже можете создавать командлеты из OO-кода (например, С#), который может вызвать ваш script. Многие профессиональные ИТ-фирмы используют его для развертывания больших веб-сайтов.

  • MSDeploy: Новый инструмент для развертывания для сайтов, которые могут реплицировать vroot на несколько серверов. Очень хорошо для вашего золотого изображения, а затем взорвать его в разных местах.

  • Приложение С#: Если вы более продвинутый разработчик , вы всегда можете написать собственное приложение, которое xcopies файлы (через Process) и использует WMI для настройки IIS. Сложнее, но у вас есть полный контроль.

Ответ 2

Вы можете использовать пользовательские параметры MSBuild. Фактически, вы можете выполнить MSBuild в sln файле, настроенном на публикацию в качестве веб-сайта, а затем скопировать предварительно скомпилированные файлы веб-сайта на веб-сервер. Мы делаем это с использованием Cruise Control.net от Thoughtworks.

В файле sln содержится информация о том, где будет находиться предварительно скомпилированный веб-сайт:

Release.AspNetCompiler.VirtualPath = "/PrecompiledWeb"
Release.AspNetCompiler.PhysicalPath = "..\Web\"
Release.AspNetCompiler.TargetPath = "..\..\PrecompiledWeb\"
Release.AspNetCompiler.Updateable = "true"
Release.AspNetCompiler.ForceOverwrite = "true"
Release.AspNetCompiler.FixedNames = "true"
Release.AspNetCompiler.Debug = "False"

Ответ 3

Мы не используем публикацию для развертывания наших веб-проектов, но мы использовали проекты веб-развертывания. Когда мы перешли на Visual Studio 2008, мы столкнулись с кучей проблем с ними, поэтому мы избавились от них.

Что я могу вам сказать, так это то, что мы смогли заменить функции WDP, которые мы использовали с помощью aspnet_merge.exe. Мы используем комбинацию msbuild и aspnet_merge.exe в script, чтобы выполнить наши развертывания.

Ответ 4

Похоже, вы можете настроить задачу "Опубликовать" с помощью целевой цели MSBuild _CopyWebApplication. Или вы можете по крайней мере создать пакетный файл, который будет вызывать эту цель, которую вы можете настроить.

Подробнее здесь и здесь.