ASP.NET Web 应用程序项目部署概述

在 Visual Studio 2010 中创建了 ASP.NET Web 应用程序项目或 ASP.NET 网站项目后,通常会将项目部署到他人可以在其中访问该应用程序的 Web 服务器。 部署通常不只是将应用程序的文件从一个服务器复制到另一个服务器。 可能还必须执行其他任务,例如以下任务:

  • 更改因目标环境而异的 Web.config 文件设置,如调试设置或数据库连接字符串。

  • 传播该 Web 应用程序所用的数据库中的数据或数据结构。

  • 在目标计算机上配置 IIS 设置,例如应用程序池、身份验证方法、是否允许目录浏览以及错误处理。

  • 安装安全证书。

  • 在目标计算机的注册表中设置值。

  • 在目标计算机上的全局程序集缓存 (GAC) 中安装应用程序程序集。

名为 Web 部署的 Microsoft Internet Information Services (IIS) 的扩展可以自动化大多数部署任务。 Visual Studio 提供了用于 Web 部署 的工具,便于您部署 Web 应用程序项目。

备注

本主题适用于使用 Web 应用程序项目模板创建的 Web 应用程序。您也可以使用网站项目模板来创建 Web 应用程序。有关如何部署网站项目的信息,请参见 ASP.NET 网站项目部署概述

本主题包含以下各节:

  • Web 部署包

  • 一键式发布

  • 企业方案

  • 第三方托管方案

  • Web.config 文件转换

  • 部署 SQL Server 数据库

  • 扩展 Web 发布管道

有关本概述中所讨论的主题的更多信息,请参见 ASP.NET 部署内容映射

Web 部署包

通过使用 Visual Studio 创建一个 Web 部署包并将此包安装在目标服务器上,可以部署一个 Web 应用程序项目。 部署包是一个压缩文件 (.zip),该文件包含在 IIS 中设置应用程序、将应用程序文件复制到其中并设置数据库等相关资源所需的信息。

您可以创建部署包,然后单独安装它。 或者,可以使用“一键式发布”。利用这一功能,您只需一步即可完成远程部署。 (默认情况下,一键式发布不会创建一个包,但如果您需要一个包,则可以指定其应创建一个包。)

除了应用程序的源文件和二进制文件外,部署包通常还包括内含以下各种信息的文件:

  • IIS 设置,例如应用程序池、身份验证方法、是否允许目录浏览以及错误处理。

  • 用于将更改传播到数据库数据或数据库结构的数据库脚本。

  • 包含在安装包时可能需要进行更改的值的参数,如调试设置或连接字符串。

Visual Studio 包创建过程是可扩展的。 一些您可能想要包含在包中的信息示例,但这些示例需要自定义扩展,包括:

  • 安全证书。

  • Windows 注册表设置。

  • 必须安装在目标计算机上的 GAC 中的程序集(.dll 文件)。

指定要在部署包中包含的内容

Visual Studio 使用您在项目**“属性”页的“打包/发布** **Web”选项卡中创建的设置,确定放入部署包中的内容。 下图显示了“打包/发布 Web”**选项卡。

“打包/发布”对话框

在**“打包/发布 SQL”**选项卡上输入影响包创建的数据库相关设置,本主题后面将对此进行描述。

利用这两个选项卡,可以更新最常用的设置。 其他不常使用的设置存储在 Visual Studio 项目文件(.csproj 或 .vbproj)中,可以通过直接编辑该文件进行更改。

创建部署包

可以通过以下方式创建包:

  • 使用 Visual Studio 中的工具。

  • 直接从命令行使用 MSBuild 命令。

  • 间接从 PowerShell 或 Team Build 使用 MSBuild 命令。

安装部署包

创建部署包之后,将其安装在目标计算机上。 Web 部署使用包中的信息来配置 IIS、设置数据库、创建文件夹结构并将文件复制到其中,以及执行部署应用程序所需的任何其他操作。

可以通过以下方式安装包:

  • 从命令行使用 Web 部署。

  • 使用 Visual Studio 创建的 .cmd 文件,该文件包含安装包的 Web 部署命令。 Web 部署命令可以长而复杂,提供此文件是为了便于从命令行安装包。

  • 使用 IIS 管理器。

  • 使用 PowerShell 执行 Web 部署命令。

可以在创建包时在其中包括参数。 这些是名称/值对,在创建包时将为其提供默认值,但在安装包时可以为其提供新值。 如果使用 IIS 管理器来安装包,则将使用文本框显示参数名称,以便您可以输入新值。 如果您通过从命令行使用 Web 部署进行安装,则可以在 XML 文件中指定参数值。

包文件夹的位置和内容

默认情况下,Visual Studio 将在由 MSBuild IntermediateOutputPath 属性标识的文件夹中生成部署包。 IntermediateOutputPath 属性引用项目的 obj\配置 文件夹,如下图的**“解决方案资源管理器”**窗口中所示:

显示部署包文件的解决方案资源管理器

配置 的预定义名称为**“Debug”(如上图中所示)和“Release”**。 您可以定义其他生成配置。

在名为 Package 的文件夹中创建包。 Package 文件夹包含以下文件:

  • 项目名称.zip。 这是实际部署包。

  • 项目名称.deploy.cmd。 这是一个命令行批处理文件,该文件调用 Web 部署以方便您从命令行安装包。

  • 项目名称.SetParameters.xml。 此文件包含使用 deploy.cmd 文件安装包时传递到 Web 部署的参数。 对于每个参数,指定默认值是由 Visual Studio 包设置确定的。 例如,如果您想要将 Web 应用程序安装到多台服务器,但对每台服务器使用不同的设置,则可以更改这些值。

  • 项目名称.SourceManifest.xml。 此文件包含 Visual Studio 传递到 Web 部署以及 Web 部署用来创建 Web 包的设置。 仅在要创建包时 Web 部署才需要此文件。 安装包时不使用此文件。

如果选择不将包创建为 .zip 文件,则本应存储在 .zip 文件中的文件将放在名为 Archive 的文件夹中。 在这种情况下,deploy.cmd、SetParameter.xml 和 SourceManifest.xml 文件名的第一个节点是“Archive”,而不是 项目名称。

Visual Studio、Web 部署和这些文件之间的相互关系如下图所示:

Visual Studio 创建的部署包

一键式发布

也可以使用 Visual Studio 的一键式发布功能,以远程方式进行部署。 在这种情况下,您将在发布配置文件中指定 Visual Studio 应如何在何处部署应用程序。 下图显示**“发布配置文件”**对话框。

“发布配置文件”对话框

如果使用一键式发布将您的应用程序部署到第三方托管公司,则该托管公司通常将向您提供**“发布配置文件”**对话框所需的设置。

指定完发布设置后,可以在此对话框或**“Web 一键式发布”工具栏中,单击“发布”按钮。 Visual Studio 即会将应用程序部署在目标计算机上。 当您在部署完 Web 应用程序项目后单击“发布”**按钮时,Visual Studio 将仅重新部署已更改的项。

可以创建多个配置文件,以便能够发布到不同的服务器,或发布到设置不同的相同服务器。

企业方案

在企业环境中,您通常会从一台开发计算机部署到一个或多个中间环境,例如测试服务器或临时服务器。 然后,从其中一个中间环境部署到生产环境。

对于从开发环境中进行的初始部署,包括以下典型方案:

  • 使用 Visual Studio 创建一个部署包并手动安装它。

  • 使用命令行进程创建并安装部署包。 通常在批处理模式下使用 MSBuild 从源代码管理存储库完成此操作。

  • 使用一键式发布。 如果开发计算机对目标环境具有远程访问权限,针对您所选择的发布方法设置了目标计算机,并且您在目标计算机上具有适当的权限,此选项可用。 默认情况下,一键式发布不会创建包。 但是,可以指定应创建一个包以用作存档或备份。

若要在初始部署后从一个环境部署到下一个环境,您可以使用为初始部署创建的相同的包。 或者,可以使用 Web 部署在从中进行部署的计算机上创建一个新包。

下图显示了一些典型的企业方案。

企业 Web 部署的典型方案

第三方托管方案

如果您使用第三方托管公司,并且直接从开发计算机部署到该托管公司,则可以选择进行以下操作:

  • 使用 Visual Studio 的一键式发布。

  • 创建一个包,并使用 IIS 管理器以远程方式安装该包。

在托管公司,您的应用程序可能处于共享环境中或位于专用服务器上。 对于承载于共享环境中的应用程序,您配置环境的能力通常会受到很大限制。 例如,通常不允许您在共享托管环境中更改 IIS 设置。

下图显示了一些典型的第三方托管方案。

典型的第三方托管部署方案

Web.config 文件转换

Web.config 文件通常包括根据应用程序的运行环境而必须不同的设置。 例如,将 Web.config 文件部署到目标服务器时,您可能必须进行诸如以下更改:

  • 更改数据库连接字符串以指向生产数据库。

  • 在生产环境中禁用调试。

  • 移除诸如连接字符串等敏感信息(例如,如果向社区站点提供包)。

若要手动管理对 Web.config 文件的更改,可以执行以下操作:

  • 每次部署项目时编辑目标服务器上的 Web.config 文件。

  • 为每个环境保留 Web.config 文件的单独版本(可能位于单独的文件夹中,或使用不同的名称),并在部署时仅复制适合于目标环境的版本。

  • 在部署应用程序时,创建 XSLT 文件以转换 Web.config 并应用转换。

对于 Web 应用程序项目,ASP.NET 提供了一些工具,用于自动完成在部署这些项目时更改(转换)Web.config 文件的过程。 对于要部署到的每个环境,您将创建一个转换文件,该文件仅指定适合于该环境的 Web.config 文件中的差异。

转换文件名包括目标环境的名称(生成配置名称)作为“Web”和“config”之间的附加节点。 例如,“调试”生成配置的转换文件为 Web.Debug.Config。 Visual Studio**“解决方案资源管理器”**窗口将自动在 Web.config 文件下分组这些文件,如下图所示:

包含 Web.config 转换文件的解决方案资源管理器

转换文件是一个 XML 文件,该文件指定应如何更改 Web.config 文件。 这些转换文件使用专为针对部署转换 Web.config 文件而设计的 XML 特性。 例如,假定 Web.config 文件具有以下连接字符串小节:

<connectionStrings>
  <add name="ApplicationServices"
      connectionString="[TestDatabase]" />
</connectionStrings>

以下转换文件指定应自动转换名为 ApplicationServices 的连接字符串,以便在部署 Web 应用程序时指向生产数据库。

<?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>

在此示例中,Locator 特性值 Match(name) 指定只应更改具有相同名称 (ApplicationServices) 的 add 元素。 Transform 特性值 Replace 指定部署过程应替换整个 add 元素。

部署 SQL Server 数据库

部署使用 SQL Server 数据库的 Web 应用程序时,您可能还必须传播数据结构、数据或同时传播这两者。 Visual Studio 可以自动创建脚本(.sql 文件)以便在目标数据库中执行此操作,并且这些脚本可包括在 Web 包中。 还可以包括自定义 SQL Server 脚本,并指定运行这些脚本时应采用的顺序。 在安装包时,Web 部署将在目标服务器上运行这些脚本。

您需要在项目**“属性”页的“打包/发布 SQL”选项卡上指定 SQL Server 部署选项。 下图显示了“打包/发布 SQL”**选项卡。

项目属性的“打包/发布 SQL”选项卡

扩展 Web 发布管道

Web 发布管道 (WPP) 是在创建部署包或使用一键式发布时 Visual Studio 使用的进程。 在 WPP 中执行的操作实际由 MSBuild 和 Web 部署完成。 这就是在 Visual Studio 中或使用命名行工具进行部署时提供相同功能的原因。

可通过修改控制 MSBuild 行为的 XML 文件来扩展 WPP 的某些方面。 例如,您可通过修改 XML 文件处理的任务包括:

  • 从包中排除特定的 Web 应用程序文件或文件夹。

  • 在创建包之前预编译 Web 应用程序。

  • 在目标服务器上的 GAC 中安装应用程序程序集。

  • 在目标服务器上更新注册表项。

  • 在目标服务器上安装 SSL 证书。

其他任务需要您同时扩展 MSBuild 和 Web 部署。 例如,假定您的 Web 应用程序将使用 MSMQ,并且您想要自动化 MSMQ 部署。 通过为 Web 部署创建一个 MSMQ 提供程序并通过修改控制 MSBuild 的文件将其添加到 WPP,可以执行此操作。

Web 部署 使用 .NET Framework 提供程序模型。 由提供程序来处理需要针对部署进行管理的每类信息。 例如,存在一个 IIS 设置提供程序、一个 SQL Server 数据库提供程序、一个 Web 内容(如 .html 文件和 .aspx 文件)提供程序,等等。

Web 部署在创建包时,将调用每个提供程序,以收集与将要部署的 Web 应用程序相关的信息。 Web 部署将调用提供程序,以序列化信息并将其存储在文件中。 当 Web 部署安装包时,提供程序将读取为包创建的文件,并反序列化在目标环境中重新创建原始设置所需的信息。提供程序必须能够处理安装时参数。 即,必须能够使用安装时在**“IIS 管理器”**UI 或 Parameters.xml 文件中提供的值。

下图演示了 Web 应用程序的信息、Web 部署提供程序、Web 部署 API、部署包和参数文件之间的数据流。 在此图中,Parameters.xml 显示在包 .zip 文件旁边以演示其角色。 但是,Parameters.xml 实际包含在包 .zip 文件中。

开发计算机

开发计算机上的 Web 部署提供程序

Web 服务器

目标服务器上的 Web 部署提供程序

Web 部署 为可能与 Web 应用程序关联的大多数类型的资源提供提供程序。 但是,如果没有任何内置提供程序适合您的要求,则可以编写自定义提供程序。 有关可用提供程序的列表,请参见 Microsoft TechNet 网站上的 Web Deploy Providers(Web 部署提供程序)。

下图演示了使用 Web 部署进行打包或发布时,WPP 中的典型步骤序列。 这将演示一个通过添加以下步骤扩展的 WPP:

  • 排除指定的文件。

  • 预编译 Web 应用程序。

  • 部署 GAC 程序集、COM 程序集和注册表项。

  • 部署 SSL 证书。

Web 发布管道 (WPP)

如果您选择通过使用一键式发布并使用 Web 部署之外的方法进行部署,则只能扩展 WPP 的不适用于 Web 部署的部分,如下图所示:

不含 Web 部署的 Web 发布管道

有关介绍如何针对特定方案扩展 Web 发布管道的示例,请参见 Visual Web Developer Team blog(Visual Web Developer 团队博客)上的以下文章:

请参见

概念

ASP.NET 部署内容映射