生成和打包 Web 应用程序项目

作者 :Jason Lee

如果要将 Web 应用程序项目部署到远程服务器环境,则第一个任务是生成项目并生成 Web 部署包。 本主题介绍 Web 应用程序项目的生成过程的工作原理。 具体而言,它解释了:

  • Web 发布管道 (WPP) 如何扩展生成过程以包含部署功能。
  • Internet Information Services (IIS) Web 部署工具 (Web 部署) 如何将 Web 应用程序转换为部署包。
  • 生成和打包过程的工作原理以及创建了哪些文件。

在 Visual Studio 2010 中,WPP 支持 Web 应用程序项目的生成和部署过程。 WPP 提供一组Microsoft 生成引擎 (MSBuild) 目标,用于扩展 MSBuild 的功能,并使它能够与 Web 部署集成。 在 Visual Studio 中,可以在 Web 应用程序项目的属性页上看到此扩展功能。 通过 “打包/发布”网页 以及 “包/发布 SQL ”页,可以配置在生成过程完成时如何打包 Web 应用程序项目以供部署。

通过“打包/发布”网页以及“打包/发布 Q L”页,可以配置生成过程完成后如何打包 Web 应用程序项目以供部署。

WPP 如何工作?

如果查看基于 C# 的 Web 应用程序项目的项目文件,可以看到它导入了两个 .targets 文件。

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\
                 v10.0\WebApplications\Microsoft.WebApplication.targets" />

第一个 Import 语句适用于所有 Visual C# 项目。 此文件 Microsoft.CSharp.targets 包含特定于 Visual C# 的目标和任务。 例如,在此处调用 C# 编译器 (Csc) 任务。 Microsoft.CSharp.targets 文件又导入 Microsoft.Common.targets 文件。 这定义了所有项目通用的目标,例如 生成重新生成运行编译清理。 第二个 Import 语句特定于 Web 应用程序项目。 Microsoft.WebApplication.targets 文件又导入 Microsoft.Web.Publishing.targets 文件。 Microsoft.Web.Publishing.targets 文件实质上 WPP。 它定义调用 Web 部署来完成各种部署任务的目标,如 PackageMSDeployPublish

若要了解如何使用这些附加目标,请在 Contact Manager 示例解决方案中打开 Publish.proj 文件并查看 BuildProjects 目标。

<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
  <MSBuild Projects="@(ProjectsToBuild)"
           Properties="OutDir=$(OutputRoot);
                       Configuration=$(Configuration);
                       DeployOnBuild=true;
                       DeployTarget=Package"
           Targets="Build" />
</Target>

此目标使用 MSBuild 任务生成各种项目。 请注意 DeployOnBuildDeployTarget 属性:

  • DeployOnBuild=true 属性实质上意味着“我希望在生成成功完成时执行其他目标”。
  • DeployTarget 属性标识当 DeployOnBuild 属性等于 true 时要执行的目标的名称。 在本例中,你指定希望 MSBuild 在生成项目后执行 目标。

目标在 Microsoft.Web.Publishing.targets 文件中定义。 从本质上讲,此目标采用 Web 应用程序项目的生成输出,并将其转换为可发布到 IIS Web 服务器的 Web 部署包。

注意

若要查看项目文件 (例如 Visual Studio 2010 中的 ContactManager.Mvc.csproj) ,首先需要从解决方案中卸载项目。 在“解决方案资源管理器”窗口中,右键单击项目节点,然后单击“卸载项目”。 再次右键单击项目节点,然后单击 “编辑[项目文件] ”) 。 项目文件将以原始 XML 形式打开。 请记得在完成后重新加载项目。
有关 MSBuild 目标、任务和 Import 语句的详细信息,请参阅 了解项目文件。 有关项目文件和 WPP 的更深入介绍,请参阅 In the Microsoft 生成引擎: Using MSBuild and Team Foundation Build by Sayed Ibrahim Hashimi and William Bartholomew, ISBN: 978-0-7356-4524-0。

什么是 Web 部署包?

使用 Visual Studio 2010 或直接使用 MSBuild 生成和部署 Web 应用程序项目时,最终结果通常是 Web 部署包。 Web 部署包是一个.zip文件。 它包含 IIS 和 Web 部署重新创建 Web 应用程序所需的所有内容,包括:

  • Web 应用程序的编译输出,包括内容、资源文件、配置文件、JavaScript 和级联样式表 (CSS) 资源等。
  • Web 应用程序项目和解决方案中任何引用项目的程序集。
  • 用于生成随 Web 应用程序一起部署的任何数据库的 SQL 脚本。

生成 Web 部署包后,可以通过各种方式将其发布到 IIS Web 服务器。 例如,可以通过将 Web 部署远程代理服务或目标 Web 服务器上的 Web 部署处理程序作为目标 Web 服务器上的目标部署处理程序进行远程部署,也可以使用 IIS 管理器在目标 Web 服务器上手动导入包。 有关这些部署方法的详细信息,请参阅 选择正确的 Web 部署方法

生成过程如何工作?

这显示了生成和打包 Web 应用程序项目时会发生什么情况:

生成和打包 Web 应用程序项目时会发生什么情况。

生成 Web 应用程序项目时,生成过程会生成名为 [项目名称].SourceManifest.xml的文件。 除了项目文件和生成输出之外,此 .SourceManifest.xml 文件会告知 Web 部署需要包含在 Web 部署包中的内容。 使用这些输入,Web 部署生成名为 [项目名称] 的 Web 部署包.zip。

除了 Web 部署包,生成过程会生成两个文件,这些文件可以帮助你使用该包:

  • .deploy.cmd 文件包括一组参数化 Web 部署 (MSDeploy.exe) 命令,用于将 Web 部署包发布到远程 IIS Web 服务器。 使用适当的参数运行 .deploy.cmd 文件通常提供了一种更快、更简单的替代方法,可以自行手动构造MSDeploy.exe命令。
  • SetParameters.xml 文件为 MSDeploy.exe 命令提供一组参数值。 这些值包括属性,例如要部署包的 IIS Web 应用程序的名称、 web.config 文件中定义的任何服务终结点和连接字符串的值,以及项目属性页上定义的任何部署属性值。

SetParameters.xml文件是管理部署过程的关键。 此文件根据 Web 应用程序项目的内容动态生成。 例如,如果将连接字符串添加到 web.config 文件,则生成过程将自动检测连接字符串,相应地参数化部署,并在 SetParameters.xml 文件中创建一个条目,以允许在部署过程中修改连接字符串。 下一主题 “为 Web 包部署配置参数”更详细地介绍了此文件的角色,并介绍了在生成和部署期间修改该文件的不同方式。

注意

在 Visual Studio 2010 中,WPP 不支持在打包之前在 Web 应用程序中预编译页面。 下一版本的 Visual Studio 和 WPP 将包括将 Web 应用程序预编译为打包选项的功能。

结论

本主题概述了 Visual Studio 2010 中 Web 应用程序项目的生成和打包过程。 它介绍了 WPP 如何允许你从 MSBuild 调用 Web 部署命令,并介绍了生成和打包过程的工作原理。

创建 Web 部署包后,下一步是部署它。 有关此内容的详细信息,请参阅 为 Web 包部署配置参数部署 Web 包

深入阅读

本教程的后续主题 “为 Web 包部署配置参数 ”和 “部署 Web 包”提供了有关如何使用已创建的 Web 包的指导。 本系列的最后一篇教程 “高级企业 Web 部署”提供了有关如何自定义打包过程和对其进行故障排除的指导。

有关项目文件和 WPP 的更深入介绍,请参阅 In the Microsoft 生成引擎: Using MSBuild and Team Foundation Build by Sayed Ibrahim Hashimi and William Bartholomew, ISBN: 978-0-7356-4524-0。