Общие сведения о развертывании проектов веб-приложений ASP.NET
После создания проекта веб-приложения ASP.NET или веб-сайта ASP.NET в Visual Studio 2010 развертывание проекта обычно выполняется на веб-сервере, где другие пользователи могут получить доступ к приложению. Развертывание обычно предполагает не просто копирование файлов приложения с одного сервера на другой. Также может потребоваться выполнение дополнительных задач, таких как:
Изменение тех параметров файла web.config, которые должны быть разными в целевой среде, например параметров для отладки или строк подключения к базам данных.
Распространение данных или структур данных в базах данных, используемых веб-приложением.
Настройка параметров IIS на целевом компьютере, таких как пул приложений, способ проверки подлинности, разрешение или запрет на просмотр каталогов и обработка ошибок.
Установка сертификатов безопасности.
Установка параметров в реестре целевого компьютера.
Установка сборок приложений в глобальном кэше сборок на целевом компьютере.
Расширение для Microsoft Internet Information Services (IIS) под названием Веб-развертывание позволяет автоматизировать большинство задач развертывания. Чтобы упростить развертывание проекта веб-приложения, в Visual Studio предусмотрены средства, работающие с Веб-развертывание.
Примечание
В этом разделе рассматриваются веб-приложения, которые создаются с помощью шаблона проекта веб-приложения.Веб-приложения можно также создавать с помощью шаблона проекта веб-сайта.Сведения о развертывании проектов веб-сайтов см. в разделе Общие сведения о развертывании проекта веб-сайта ASP.NET.
В этом разделе содержатся следующие подразделы.
Пакеты веб-развертывания
Публикация одним щелчком
Сценарии для предприятий
Сценарии, характерные для использования стороннего хостинга
Преобразование файла web.config
Развертывание базы данных SQL Server
Расширение конвейера публикации в Интернете
Дополнительные сведения по вопросам, рассматриваемым в данном обзоре, см. в разделе Карта содержимого развертывания ASP.NET.
Пакеты веб-развертывания
Проект веб-приложения можно развернуть, создав с помощью Visual Studio пакет веб-развертывания и установив его на целевой сервер. Пакет развертывания — это сжатый (ZIP) файл, содержащий сведения, необходимые для настройки приложения в IIS, копирования в него файлов приложений и настройки соответствующих ресурсов, например баз данных.
Можно создать пакет развертывания и затем установить его отдельно. Или же можно воспользоваться функцией публикация одним щелчком, позволяющей выполнить развертывание удаленно за одну операцию. (По умолчанию при публикации одним щелчком пакет не создается, но можно указать, чтобы он создавался.)
Помимо исходных файлов приложения и двоичных файлов, в пакете развертывания обычно имеются файлы, содержащие следующую информацию.
Параметры IIS, такие как пул приложений, способ проверки подлинности, разрешение или запрет на просмотр каталогов и обработка ошибок.
Скрипты баз данных, используемые для внесения изменений в данные баз данных или в структуры баз данных.
Параметры, содержащие значения, которые, возможно, потребуется изменить при установке пакета, например параметры для отладки или строки подключения.
Процесс создания пакета Visual Studio является расширяемым. Ниже приведены примеры информации, которую можно включить в пакет, но для нее требуются настраиваемые расширения.
Сертификаты безопасности.
Параметры реестра Windows.
Сборки (DLL-файлы), которые необходимо установить в глобальном кэше сборок конечного компьютера.
Указание того, что следует включить в пакет развертывания
Visual Studio использует параметры, задаваемые на вкладке Упаковка и публикация веб-проекта страницы Свойства проекта, чтобы определить, что следует включить в пакет развертывания. На следующем рисунке показана вкладка Пакет/Публикация веб-сайта.
Параметры, связанные с базой данных, которые влияют на создание пакета, вводятся на вкладке Упаковка и публикация SQL-проекта, которая описывается далее в данном разделе.
Эти две вкладки позволяют обновлять наиболее часто используемые параметры. Другие параметры, которые используются редко, хранятся в файле проекта Visual Studio (CSPROJ или VBPROJ) и могут изменяться путем непосредственного редактирования этого файла.
Создание пакета развертывания
Пакет можно создать одним из следующих способов.
С помощью средств Visual Studio.
С помощью команды MSBuild непосредственно из командной строки.
С помощью команды MSBuild из PowerShell или Team Build.
Установка пакета развертывания
После создания пакет развертывания необходимо установить на конечный компьютер. Средство Веб-развертывание использует содержащуюся в пакете информацию для настройки IIS и баз данных, создания структур папок и копирования в них файлов, а также для выполнения любых других задач, необходимых для развертывания приложения.
Пакет можно установить одним из следующих способов.
С помощью средства Веб-развертывание из командной строки.
С помощью создаваемого Visual Studio CMD-файла, который содержит команды Веб-развертывание, обеспечивающие установку пакета. Команды Веб-развертывание могут быть длинными и сложными, и этот файл предназначен для упрощения установки пакета из командной строки.
С помощью диспетчера IIS.
С помощью PowerShell для выполнения команд Веб-развертывание.
При создании пакета можно включить в него параметры. Это пары "имя-значение", для которых при создании пакета устанавливается значение по умолчанию, но после установки пакета может быть задано новое значение. Если для установки пакета используется диспетчер IIS, имена параметров отображаются с помощью текстовых полей, что позволяет вводить новые значения. Если установка осуществляется с помощью Веб-развертывание из командной строки, значения параметров можно указать в XML-файле.
Расположение и содержимое папки пакета
По умолчанию Visual Studio создает пакеты развертывания в папке, определяемой свойством IntermediateOutputPath MSBuild. Свойство IntermediateOutputPath ссылается на папку obj\конфигурация проекта, как показано на следующей иллюстрации окна Обозреватель решений:
Предварительно определенные имена конфигурации — Debug (как показано на предыдущем рисунке) и Release. Можно определить дополнительные конфигурации построения.
Пакет создается в папке с именем Package. В папке Package содержатся следующие файлы:
имя_проекта.zip. Это сам пакет развертывания.
имя_проекта.deploy.cmd. Это пакетный файл командной строки, который вызывает Веб-развертывание для упрощения установки пакета из командной строки.
имя_проекта.SetParameters.xml. Этот файл содержит параметры, передаваемые средству Веб-развертывание, если для установки пакета используется файл deploy.cmd. Для каждого параметра задается значение по умолчанию, определяемое параметрами пакета Visual Studio. Эти значения можно изменить, если, например, веб-приложение требуется установить на несколько серверов, но использовать для каждого из них разные параметры.
имя_проекта.SourceManifest.xml. Этот файл содержит параметры, переданные системой Visual Studio средству Веб-развертывание и использованные средством Веб-развертывание для создания веб-пакета. Этот файл необходим средству Веб-развертывание только для создания пакета. После установки пакета он не используется.
Если не создавать пакет в виде ZIP-файла, файлы, которые должны были в нем содержаться, помещаются в папку с именем Archive. В этом случае первым компонентом имен файлов deploy.cmd, SetParameter.xml и SourceManifest.xml будет компонент "Archive", а не имя_проекта.
На следующей иллюстрации показаны взаимосвязи между Visual Studio, Веб-развертывание и этими файлами:
Публикация одним щелчком
Развертывание также можно выполнить удаленно с помощью функции Visual Studio публикация одним щелчком. В этом случае в профиле публикации указывается, где и как система Visual Studio должна развернуть приложение. На следующем рисунке показано диалоговое окно Профиль публикации.
Если для развертывания приложения на сервере размещения используется функция публикации одним щелчком, компания-поставщик услуг размещения обычно предоставляет параметры, которые требуется указать в диалоговом окне Профиль публикации.
Указав параметры публикации, можно нажать кнопку Опубликовать в этом диалоговом окне или на панели инструментов Веб-публикация одним щелчком. Visual Studio выполнит развертывание приложения на конечном компьютере. При нажатии кнопки Опубликовать после завершения развертывания проекта веб-приложения система Visual Studio повторно развернет только измененные элементы.
Можно создать несколько профилей для публикации на различных серверах (или на одном сервере с разными параметрами).
Сценарии для предприятий
На предприятиях развертывание обычно выполняется с компьютера разработчика на один или несколько промежуточных компьютеров, таких как тестовый сервер и промежуточный сервер. Затем из одной из промежуточных сред выполняется развертывание в рабочую среду.
Ниже перечислены типичные сценарии исходного развертывания из среды разработки.
Создание пакета развертывания с помощью Visual Studio и его установка вручную.
Создание и установка пакета развертывания с помощью командной строки. Это обычно делается в пакетном режиме из хранилища системы управления версиями с помощью MSBuild.
Воспользоваться функцией публикации одним щелчком. Эта возможность доступна, если с компьютера разработчика есть удаленный доступ к целевой среде, целевой компьютер настроен на использование выбранного способа публикации и у пользователя имеются соответствующие разрешения на целевом компьютере. По умолчанию при публикации одним щелчком пакет не создается. Однако можно указать, чтобы он создавался для использования в качестве архивной или резервной копии.
Чтобы выполнить развертывание из одной среды в другую после исходного развертывания, можно воспользоваться пакетом, созданным для исходного развертывания. Можно также использовать Веб-развертывание для создания нового пакета на компьютере, с которого выполняется развертывание.
На следующем рисунке представлены некоторые стандартные сценарии для предприятий.
Сценарии, характерные для использования стороннего хостинга
Если используются услуги хостинга сторонней компании и развертывание выполняется напрямую с компьютера разработчика на компьютер хостинга, эту задачу можно выполнить следующими способами.
Воспользоваться функцией публикации одним щелчком в Visual Studio.
Создать пакет и установить его удаленно с помощью диспетчера IIS.
В компании-поставщике услуг хостинга приложение может размещаться в общей среде или на выделенных серверах. Возможности по настройке приложений, размещаемых в общей среде, как правило, крайне ограничены. Например, в общей среде хостинга обычно не разрешается изменять параметры IIS.
На следующем рисунке представлены некоторые стандартные сценарии при использовании услуг хостинга сторонней компании.
Преобразование файла web.config
В файлах Web.config обычно содержатся параметры, которые должны иметь различные значения в зависимости от среды, в которой выполняется приложение. Например, при развертывании файла web.config на целевом сервере может потребоваться внести следующие изменения.
Изменить строку подключения к базе данных так, чтобы она указывала на рабочую базу данных.
Отключить отладку в рабочей среде.
Удалить конфиденциальную информацию, например строки подключения, если пакет предоставляется сайту сообщества.
Управлять изменениями файла web.config вручную можно следующим образом.
Изменять файл Web.config на конечном сервере при каждом развертывании проекта.
Поддерживать отдельные версии файла web.config для каждой среды (возможно, в отдельных папках или с использованием описательных имен) и при развертывании копировать только ту версию, которая подходит для целевой среды.
Создать XSLT-файлы для преобразования файла web.config и применять их при развертывании приложения.
Для проектов веб-приложений в ASP.NET имеются инструменты, автоматизирующие процесс изменения (преобразования) файлов Web.config при их развертывании. Для каждой среды, в которую требуется выполнить развертывание, необходимо создать файл преобразования, в котором указаны только отличия файла Web.config для этой среды.
Имя файла преобразования включает имя конечной среды (имя конфигурации построения) как дополнительный узел между узлами "Web" и "config". Например, файл преобразования для конфигурации построения Debug называется Web.Debug.Config. Окно Обозреватель решений Visual Studio автоматически группирует эти файлы под файлом web.config, как показано на следующей иллюстрации:
Файл преобразования представляет собой XML-файл, в котором указаны изменения, которые требуется внести в файл Web.config. В файлах преобразования используются атрибуты XML, предназначенные специально для преобразования файлов web.config для развертывания. Например, предположим, что в файле Web.config в разделе строки подключения указано следующее:
<connectionStrings>
<add name="ApplicationServices"
connectionString="[TestDatabase]" />
</connectionStrings>
В следующем файле преобразования указано, что строка подключения с именем ApplicationServices должна быть автоматически преобразована так, чтобы при развертывании веб-приложения указывать на рабочую базу данных.
<?xml version="1.0"?>
<configuration xmlns:xdt="https://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="ApplicationServices"
connectionString="[ProductionDatabase]"
xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
В приведенном примере значение Match(name) атрибута Locator указывает, что должен быть изменен только элемент add, имеющий то же имя (ApplicationServices). Значение Replace атрибута Transform указывает, что в процессе развертывания должен быть заменен весь элемент add.
Развертывание базы данных SQL Server
При развертывании веб-приложения, использующего базу данных SQL Server, может также потребоваться распространить структуры данных, данные или структуры данных и данные. Visual Studio может автоматически создать скрипты (SQL-файлы), чтобы сделать это в целевой базе данных, и эти скрипты можно включить в веб-пакет. Также можно включить пользовательские скрипты для SQL Server и указать последовательность их выполнения. Средство Веб-развертывание выполняет скрипты на целевом сервере при установке пакета.
Параметры развертывания SQL Server указываются на вкладке Пакет/Публикация SQL страницы Свойства проекта. На следующем рисунке показана вкладка Пакет/Публикация SQL.
Расширение конвейера публикации в Интернете
Конвейер публикации в Интернете — это процесс, используемый системой Visual Studio при создании пакета развертывания или использовании функции публикации одним щелчком. Действия, выполняемые в конвейере публикации в Интернете, фактически выполняются средствами MSBuild и Веб-развертывание. Поэтому в Visual Studio и при использовании средств командной строки для развертывания доступны одни и те же функции.
Некоторые аспекты конвейера публикации в Интернете можно расширить, изменив XML-файлы, которые управляют поведением MSBuild. Ниже перечислены примеры задач, которые можно выполнять путем изменения XML-файлов.
Исключение определенных файлов или папок веб-приложения из пакета.
Предварительная компиляция веб-приложения перед созданием пакета.
Установка сборок приложения в глобальном кэше сборок на целевом сервере.
Обновление разделов реестра на целевом сервере.
Установка сертификатов SSL на целевом сервере.
Для других задач требуется расширить MSBuild и Веб-развертывание. Например, предположим, что веб-приложение использует MSMQ и требуется автоматизировать развертывание MSMQ. Это можно сделать путем создания поставщика MSMQ для Веб-развертывание и его добавления в конвейер публикации в Интернете с изменением файлов, управляющих платформой MSBuild.
Средство Веб-развертывание использует модель поставщика платформы .NET Framework. Информация всех типов, которой требуется управлять при развертывании, обрабатывается поставщиком. Например, существует поставщик параметров IIS, поставщик баз данных SQL Server, поставщик веб-содержимого, например HTML- и ASPX-файлов, и т. д.
Когда средство Веб-развертывание создает пакет, оно обращается к каждому поставщику, чтобы собрать сведения, относящиеся к веб-приложению, которое требуется развернуть. Веб-развертывание вызывает поставщик, чтобы выполнить сериализацию сведений и сохранить их в файлах. Когда Веб-развертывание устанавливает пакет, поставщик считывает файлы, созданные им для пакета, и выполняет десериализацию сведений, необходимых для восстановления исходных параметров в целевой среде. Поставщики должны быть способны обрабатывать параметры установки, то есть работать со значениями, предоставляемыми во время установки в пользовательском интерфейсе диспетчера IIS или в файле Parameters.xml.
На следующих иллюстрациях показан поток данных между сведениями веб-приложения, поставщиками Веб-развертывание, API Веб-развертывание, пакетом развертывания и файлом параметров. На иллюстрации файл Parameters.xml показан рядом с ZIP-файлом пакета, чтобы продемонстрировать его роль. Однако фактически файл Parameters.xml включается в ZIP-файл пакета.
Компьютер разработчика
Веб-сервер
Средство Веб-развертывание предоставляет поставщиков для большинства типов ресурсов, которые могут быть связаны с веб-приложением. Однако можно написать пользовательский поставщик, если ни один из встроенных поставщиков не соответствует требованиям. Список доступных поставщиков см. в разделе Web Deploy Providers на веб-сайте Microsoft TechNet.
На следующей иллюстрации показана типичная последовательность действий в конвейере публикации в Интернете при использовании Веб-развертывание для упаковки или публикации. Представлен конвейер публикации в Интернете, который был расширен путем добавления следующих действий.
Исключение указанных файлов.
Предварительная компиляция веб-приложения.
Развертывание сборок глобального кэша сборок, сборок модели COM и разделов реестра.
Развертывание сертификатов SSL.
Если требуется выполнить развертывание посредством функции публикации одним щелчком и с помощью метода, отличного от использования Веб-развертывание, можно расширить только те части конвейера публикации в Интернете, которые не относятся к Веб-развертывание, как показано на следующей иллюстрации:
Примеры с описанием способа расширения конвейера публикации в Интернете для конкретных сценариев см. в следующих записях блога Visual Web Developer Team blog: