Вопросы и ответы о развертывании проектов веб-приложений ASP.NET

В этом разделе даются ответы на часто задаваемые вопросы о развертывании проектов веб-приложений.

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

В этом разделе содержатся следующие подразделы.

  • Можно ли исключить определенные файлы или папки из развертывания?

  • Можно ли изменять подробность сведений об упаковке или процессе публикации в окне вывода?

  • Можно ли развертывать полнотекстовый каталог для базы данных?

  • Можно ли ссылаться на созданные системой объекты базы данных в пользовательских скриптах развертывания?

  • Можно ли использовать службу удаленного агента через протокол HTTPS при публикации одним щелчком?

  • Можно ли использовать параметр поставщика tempAgent инструмента "Веб-развертывание" с публикацией одним щелчком?

  • Можно ли прервать упаковку или публикацию, если вы что-то забыли и нужно начать заново?

  • Можно ли при публикации одним щелчком создать пакет для архивации?

  • Можно ли сделать так, чтобы при каждом построении решения создавался пакет?

  • Можно ли изменить расположение по умолчанию, в котором Visual Studio создает пакет развертывания?

  • Можно ли настроить правила делегирования так, чтобы разработчики могли выполнять развертывание на серверы промежуточного хранения, но не могли изменять параметры IIS?

  • Почему при запуске пользовательских скриптов при развертывании возникает ошибка истечения времени ожидания SQL?

  • Почему возникает ошибка с сообщением, что необходима платформа ASP.NET 4, если эта платформа уже установлена?

  • Как исправить следующую ошибку: "Данные потока sitemanifest ... пока недоступны"?

  • Почему развертывание завершается неудачей, если оно пытается выполнить команду базы данных CREATE USER или CREATE ROLE?

  • Можно ли создать один пакет и с его помощью выполнить развертывание и в IIS 6, и в IIS 7?

  • Развертывание проекта ASP.NET Razor, использующего SQL Server Compact

  • Можно ли использовать PUBLISHSETTINGS-файл в Visual Studio?

Можно ли исключить определенные файлы или папки из развертывания?

Ограничить количество развертываемых файлов можно, выбрав параметр Только необходимые для запуска приложения файлы или Все файлы в этом проекте на вкладке Упаковка и публикация веб-проекта. Если выбран параметр Все файлы в этом проекте, можно щелкнуть файл правой кнопкой мыши в обозревателе решений и выбрать команду Исключить из проекта, чтобы этот файл не развертывался.

Если эти параметры не обеспечивают достаточной гибкости, измените файл проекта и добавьте элемент ExcludeFilesFromDeployment, элемент ExcludeFoldersFromDeployment или и тот, и другой в соответствующий элемент PropertyGroup. В каждом элементе можно задать одно имя или несколько имен, разделенных точками с запятой (;). В следующем примере показан элемент PropertyGroup для конфигурации построения Debug.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <ExcludeFilesFromDeployment>
    File1.aspx;File2.aspx
  </ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>
    Folder1;Folder2
  </ExcludeFoldersFromDeployment>
  <!-- Other settings -->
</PropertyGroup> 

К началу

Можно ли изменять подробность сведений об упаковке или процессе публикации в окне вывода?

Уровень детализации сведений об упаковке и публикации контролируется тем же параметром Visual Studio, который определяет детализацию сведений MSBuild. В главном меню последовательно выберите пункты Инструменты и Параметры. В диалоговом окне Параметры разверните узел Проекты и решения и выберите пункт Построение и запуск. Отобразится раскрывающийся список Степень подробности сообщений при построении проекта MSBuild, в котором можно выбрать один из следующих параметров.

  • Отсутствуют

  • Минимальный

  • Обычные

  • Подробные

  • Диагностические

Аналогичные параметры задаются флагом /verbosity или /v при запуске MSBuild из командной строки. Дополнительные сведения о флагах командной строки MSBuild см. в разделе Справочные сведения о командной строке MSBuild.

К началу

Можно ли развертывать полнотекстовый каталог для базы данных?

По умолчанию все скрипты, автоматически созданные Visual Studio для развертывания, выполняются в транзакции. Скрипты, развертывающие полнотекстовые каталоги, не выполняются в транзакциях. Поэтому по умолчанию Visual Studio не создает скрипты для полнотекстовых каталогов.

Чтобы развертывание включало полнотекстовый каталог, внесите в файл проекта следующие изменения.

  • Задайте для атрибута Transacted элемента Source автоматически созданного скрипта значение False.

  • Задайте для атрибута CopyAllFullTextCatalogs элемента PreSource автоматически созданного скрипта значение True.

К началу

Можно ли ссылаться на созданные системой объекты базы данных в пользовательских скриптах развертывания?

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

Можно указать, что имена объектов, создаваемых системой, должны совпадать в целевой базе данных и базе данных-источнике. Для этого отредактируйте файл проекта и добавьте следующий атрибут к элементу PreSource автоматически созданного скрипта.

DriIncludeSystemNames="True"

К началу

Можно ли использовать службу удаленного агента через протокол HTTPS при публикации одним щелчком?

Нет. При вводе URL-адреса HTTPS в текстовое поле URL-адреса диалогового окна Публикация веб-сайта Visual Studio автоматически использует службу управления Windows. Если нужно использовать протокол HTTPS, рекомендуется использовать службу управления Windows.

К началу

Можно ли использовать параметр поставщика tempAgent инструмента "Веб-развертывание" с публикацией одним щелчком?

Нет. Если нужно использовать параметр поставщика tempAgent, необходимо применить команду Веб-развертывание или файл deploy.cmd, созданный Visual Studio одновременно с пакетом развертывания.

К началу

Можно ли прервать упаковку или публикацию, если вы что-то забыли и нужно начать заново?

Да. Нажмите CTRL+BREAK. Процесс упаковки или публикации остановится. При повторном запуске Visual Studio начнет с места остановки, не повторяя уже выполненную работу.

К началу

Можно ли при публикации одним щелчком создать пакет для архивации?

Да. Отредактируйте файл проекта, добавив элемент CreatePackageOnPublish в соответствующий элемент PropertyGroup, как показано в следующем примере.

<CreatePackageOnPublish>True</CreatePackageOnPublish>

К началу

Можно ли сделать так, чтобы при каждом построении решения создавался пакет?

Да. Отредактируйте файл проекта, добавив элемент DeployOnBuild в соответствующий элемент PropertyGroup. В следующем примере показан элемент PropertyGroup для конфигурации построения Release.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DeployOnBuild>True</DeployOnBuild>
  <!-- Additional settings -->
</PropertyGroup>

Для элемента DeployDefaultTarget должно быть задано значение Package. Это необязательно, поскольку это значение по умолчанию.

К началу

Можно ли изменить расположение по умолчанию, в котором Visual Studio создает пакет развертывания?

Да. Отредактируйте файл проекта, добавив элемент IntermediateOutputPath в соответствующий элемент PropertyGroup. В следующем примере показан элемент PropertyGroup для конфигурации построения Release.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <IntermediateOutputPath>Path</IntermediateOutputPath>
  <!-- Additional settings -->
</PropertyGroup>

Замените Путь полным путем папки, в которой должны быть созданы все файлы, связанные с пакетом развертывания.

К началу

Можно ли настроить правила делегирования так, чтобы разработчики могли выполнять развертывание на серверы промежуточного хранения, но не могли изменять параметры IIS?

Это возможно в IIS 7 и более поздних версиях. Сведения о делегировании разрешений развертывания см. в следующих разделах.

К началу

Почему при запуске пользовательских скриптов при развертывании возникает ошибка истечения времени ожидания SQL?

При выполнении нескольких скриптов, объединяющих разные режимы транзакции, могут возникать ошибки истечения времени ожидания. По умолчанию автоматически создаваемые скрипты запускаются в транзакции. При этом пользовательские скрипты не запускаются в транзакции. Таким образом, если выбран параметр Извлечь данные и (или) схему из существующей базы данных на вкладке Упаковка и публикация SQL-проекта, при добавлении пользовательского скрипта SQL необходимо изменить параметры транзакции некоторых скриптов, чтобы все скрипты использовали одинаковые параметры транзакции. Дополнительные сведения см. в разделе Практическое руководство. Развертывание базы данных с проектом веб-приложения.

К началу

Почему возникает ошибка с сообщением, что необходима платформа ASP.NET 4, если эта платформа уже установлена?

Чтобы развернуть веб-приложение ASP.NET 4, необходимо зарегистрировать ASP.NET 4 в службах IIS на целевом сервере. Кроме того, пул приложений веб-сайта IIS, в который выполняется развертывание, должен быть назначен платформе .NET Framework 4. Если не выполнено какое-либо из этих условий, при попытке развертывания может возникнуть одна из следующих ошибок.

  • Пул приложений .NET 4.0 по умолчанию не существует, либо приложение не удалось добавить. Убедитесь, что платформа ASP.NET 4.0 установлена на этом компьютере.

  • Для свойства "managedRuntimeVersion" пула приложений, который вы пытаетесь использовать, установлено значение "v2.0". Для этого приложения требуется "v4.0".

ASP.NET 4 устанавливается вместе с Visual Studio. Однако в процессе установки ASP.NET 4 не регистрируется автоматически в службах IIS, и существующие веб-сайты IIS не назначаются автоматически пулам приложений .NET 4. Чтобы исправить эту ошибку, зарегистрируйте ASP.NET в службах IIS и задайте пул приложений целевого веб-сайта IIS версии платформы .NET Framework, необходимой для этого пакета. Сведения о регистрации в службах IIS см. в разделе Программа регистрации IIS для ASP.NET (Aspnet_regiis.exe).

К началу

Как исправить следующую ошибку: "Данные потока sitemanifest ...пока недоступны"?

В некоторых случаях при попытке установить пакет с помощью файла deploy.cmd с параметром t (тест) возникает ошибка, сходная с приведенной в следующем примере.

Ошибка: Данные потока "sitemanifest/dbFullSql[@path='C:\TEMP\AdventureWorksGrant.sql']/sqlScript" пока недоступны.

Это означает, что команде не удалось создать тестовый отчет. Это сообщение не означает, что при попытке выполнить команду с параметром y (фактическая установка) развертывание закончится неудачей. Сообщение указывает только на наличие проблемы при выполнении команды в тестовом режиме.

К началу

Почему развертывание завершается неудачей, если оно пытается выполнить команду базы данных CREATE USER или CREATE ROLE?

Эта ошибка часто возникает, если база данных содержит пользователей или роли, но выполняется публикация с использованием учетных данных, у которых нет разрешения создавать пользователей или роли. Например, оказывающая услуги размещения компания может назначить созданной для вас учетной записи пользователя роли db_datareader, db_datawriter и db_ddladmin. Их достаточно, чтобы создавать большинство объектов базы данных, но недостаточно для создания пользователей или ролей. Если причина ошибки в этом, вы увидите в окне вывода сообщения, похожие на показанные в следующем примере.

Приблизительное расположение ошибки - между строками скрипта "1" и "3". Дополнительные сведения могут содержаться в подробном журнале. Начало команды:

CREATE USER [пользователь_2] FOR LOGIN [пользователь_2] WITH DEFAULT

Ошибка: У пользователя нет разрешений на выполнение данного действия.

Дать сбой также могла команда CREATE ROLE. В этом случае можно избежать ошибки, исключив из развертывания базы данных пользователей и роли. Для этого нужно изменить элемент PreSource для автоматически созданного скрипта базы данных так, чтобы он включал следующие атрибуты.

CopyAllUsers=false, CopyAllRoles=false

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

К началу

Можно ли создать один пакет и с его помощью выполнить развертывание и в IIS 6, и в IIS 7?

Для развертывания в IIS 6 и IIS 7 можно использовать один пакет, если выполнено одно из следующих условий.

  • Не выбран параметр Включить все параметры IIS в соответствии с их настройками в диспетчере служб IIS на вкладке Упаковка и публикация веб-проекта.

  • При выборе параметра Включить все параметры IIS в соответствии с их настройками в диспетчере служб IIS создается пакет для IIS 6.

Нельзя развернуть в IIS 6 пакет, созданный для IIS 7, если выбран параметр Включить все параметры IIS в соответствии с их настройками в диспетчере IIS.

Развертывание проекта ASP.NET Razor, использующего SQL Server Compact

Проект можно развернуть, поместив сборки ASP.NET Razor и SQL Server Compact в папку Bin проекта. Чтобы включить необходимые сборки в проект веб-сайта или веб-приложения, выполните следующие действия.

  1. В обозревателе решений щелкните правой кнопкой мыши имя проекта и выберите команду Добавить развертываемые зависимости.

  2. В диалоговом окне Добавление развертываемых зависимостей выберите Веб-страницы ASP.NET с синтаксисом Razor и SQL Server Compact.

  3. Нажмите кнопку ОК.

Теперь веб-проект можно развертывать так же, как и другие проекты.

Можно ли использовать PUBLISHSETTINGS-файл в Visual Studio?

Если поставщик услуг хостинга прислал PUBLISHSETTINGS-файл, его можно использовать в Visual Studio, разместив в корневой папке проекта.

См. также

Основные понятия

Карта содержимого развертывания ASP.NET