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





Я считаю опцию публикации частью набора инструментов VS.NET, которую разработчики могут использовать для публикации веб-сайтов на машинах разработчиков. На самом деле он не предназначен для реального развертывания.
Если вам нужны настраиваемые действия, проект веб-развертывания больше подходит для реального развертывания, которое регулярно запускают несколько человек, кроме разработчика, и которое вы хотите создавать с каждой сборкой.
Я бы также посмотрел на три других варианта:
PowerShell: Хороший способ сценарий против IIS, настройки веб-сайтов и т. д. Вы даже можете создавать командлеты из объектно-ориентированного кода (например, C#), которые ваш скрипт может вызывать. Многие профессиональные ИТ-компании используют его для развертывания больших веб-сайтов.
MSDeploy: Новый инструмент развертывания для веб-сайтов, которые могут реплицировать vroot на несколько серверов. Очень хорошо для того, чтобы иметь свой золотой образ, а затем разносить его по разным местам.
Приложение C#: Если вы более продвинутый разработчик, вы всегда можете написать собственное приложение, которое копирует файлы (через процесс) и использует WMI для настройки IIS. Сложнее, но вы полностью контролируете ситуацию.
Вы может используете настраиваемые параметры 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"
Мы не используем публикацию для развертывания наших веб-проектов, но раньше мы использовали проекты веб-развертывания. Когда мы перешли на Visual Studio 2008, мы столкнулись с рядом проблем с ними, поэтому мы от них избавились.
Что я могу вам сказать, так это то, что мы смогли заменить функции WDP, которые мы использовали, на aspnet_merge.exe. Мы используем комбинацию msbuild и aspnet_merge.exe в скрипте, чтобы выполнить наши развертывания.
Вау. Я даже не слышал об aspnet_merge, пока вы об этом не упомянули. Вот документы: msdn.microsoft.com/en-us/library/bb397866.aspx