从 Visual Studio 2010 生成 Web 部署包

作者:Ben Byrd

总结

到目前为止,我们已在 Web 服务器上安装了 Web 部署,并使非管理员能够将应用程序部署到 IIS 7。 在本演练中,我们将了解开发人员如何创建可由有权访问 Web 服务器的用户(例如管理员或 IT/运营团队)部署的 Web 部署包。 该包包含要部署的文件(二进制文件和静态内容)、数据库和 IIS 设置。

在本教程中,我们将包从开发计算机部署到服务器,并且还将探索如何使用 IIS 管理器中的 Web 部署 UI 将其导入到服务器上。

Web 部署包

在 Visual Studio 2010 中,可以通过 UI 或使用命令行上的 MSBuild 创建 Web 部署包。 这两种方法都将生成 1) 标准 Web 部署包和 2) 可帮助你部署包的批处理 (.cmd) 文件。

配置打包/发布选项:

  1. 启动 Visual Studio 2010 并加载 Contoso University C# 解决方案。

  2. 在“解决方案资源管理器”中,展开 ContosoUniversity 节点,然后双击“属性”(C#)
    Screenshot of the Solution Explorer screen with a highlight on the Properties option.

  3. 单击“打包/发布 Web”选项卡
    Screenshot of the Properties screen with a focus on the Package/Publish Web tab.

  4. 选择包的配置。
    Screenshot of the Configuration and Platform fields.
    包是特定于配置的,并且设置是按配置进行设置的,因此你需要在创建包之前选择配置并配置设置。

  5. 配置“要部署的项(适用于所有部署方法)”
    Screenshot of the Items to Deploy field.
    无论使用 Web 部署还是其他发布方法进行发布,都将使用这些选项。

    • “要部署的项”有三个选项
      Screenshot of a drop-down list with the Only files needed to run this application option highlighted.
      在大多数情况下,“仅限运行此应用程序所需的文件”选项应该就足够了。 这将排除运行站点时通常不需要的源代码、项目文件和其他文件。 “此项目中的所有文件”选项将发布上述集合以及源文件、项目文件和其他相关文件。 “此项目文件夹中的所有文件”选项将包括不在项目中的文件,但 obj 文件夹下的文件除外
    • “排除生成的调试符号”选项指示 VS 排除正在生成的调试符号
    • “从App_Data文件夹中排除文件”选项将排除 App_Data 文件夹中的文件
  6. 配置“要部署的项(仅适用于 Web 部署)”
    Screenshot of the Items to deploy (applies to Web Deploy only) field.
    仅当创建 Web 部署包或使用 Web 部署协议进行发布时,这些选项才适用。

    • “包括所有数据库”选项告知 Web 部署是否部署在“打包/发布 SQL”选项卡中配置的数据库
    • 《链接到有关 IIS 设置的文章》一文中介绍了“包括 IIS/IIS Express 中配置的所有 IIS 设置”和“包括此 Web 项目使用的应用程序池设置”选项,这两个选项只有在“Web”属性选项卡上选择了“使用本地 Web 服务器”而不是“Cassini 开发服务器”时才可用
  7. 配置“Web 部署包设置”
    Screenshot of the Web Deployment Package Settings section showing the zip file location and application name to be used on the destination server.

    • “创建部署包作为 zip 文件”选项将确定在创建包时是创建 zip 文件还是目录结构(存档目录。 除非创建的包会遇到 ZIP 文件大小限制为 2,147,483,647 字节 (Int.MaxValue),否则建议使用 ZIP 格式。
    • “将创建包的位置”选项指定将创建包文件的位置。 你需要确保自己对指定位置具有写入权限。
    • “要在目标服务器上使用的 IIS 网站/应用程序名称”选项指定将在目标服务器上使用的默认站点或应用程序名称(如果用户未指定其他站点或应用程序名称)
    • 《链接到有关 IIS 设置的文章》一文中介绍了“目标服务器上 Web 应用程序的物理路径(仅在包含 IIS 设置时使用)”和“用于加密安全 IIS 设置的密码”选项

配置打包/发布 SQL 选项:

在某些情况下,需要将数据库与应用程序一起部署。 例如,首次部署应用程序时,可能需要部署包含架构和数据的数据库。

请注意,Visual Studio 2010 不支持增量数据库部署。

  1. 如果要在包中包含数据库,请单击“打包/发布 SQL”选项卡
    Screenshot of the Web Deployment Package Settings section.

  2. 选择包的配置。
    Screenshot of the available tabs with a focus on the Package/Publish S Q L tab.
    包是特定于配置的,因此需要在创建包之前选择包的配置设置。

  3. 如果 Web.config 文件具有数据库连接字符串,则可以单击“从 Web.Config 导入”。导入完成后将出现一条消息。
    Screenshot of the Package/Publish S Q L tab with a focus on the Database Entries field, showing the Display and Name categories.
    如果未找到连接字符串,则会显示以下内容:
    Screenshot of a Microsoft Visual Studio error message, stating that there was no connection string found in the Web.config.
    如果看到此错误,请检查 Web.Config 文件是否具有所需的连接字符串,以及该文件是否尚未被修改(编辑器选项卡中的星号将指示文件已更改且未保存更改。)

  4. 如果要添加到部署包的数据库未在“数据库条目”下列出,请单击“添加”按钮添加连接

  5. 添加所有连接后,可以选择某个条目,并使用向上和向下箭头调整其在列表中的顺序以指定将其添加到包的顺序,并因此进行部署。

    单击数据库条目可将其删除。

  6. 接下来,在“数据库条目详细信息”部分配置每个数据库的详细信息

    1. 从“数据库条目”列表中选择一个数据库
      Screenshot of the Database Entry Details list.
    2. 在“目标数据库的连接字符串”字段中,输入将数据库部署到服务器时要使用的连接字符串。 这是一键式发布所必需的,但对于打包,此值将用作可在部署时更改的默认值。
      注意:此值不会用于更新 Web.config 文件中的连接字符串信息。 可使用 Web.config 转换更新每个生成配置的 Web.config 文件。 有关 Web.config 转换的详细信息,请参阅《链接到发布文章》、MSDN 上的本文或此处“Web.Config 转换”部分下 Vishal Joshi 发布的博客。
    3. “从现有数据库拉取数据和/或架构”选项将编写“源数据库的连接字符串”字段所指向的数据库的脚本,并根据为“数据库脚本编写选项”选择的设置编写架构或/和数据的脚本
    4. 最后一个选项“数据库脚本”是添加自定义 SQL 脚本并选择脚本的执行顺序。 如果选中了“源数据库信息”下的“从现有数据库拉取数据和/或架构”复选框,则会出现“[自动生成 <数据库脚本编写选项>]”复选框<>。 如果要执行其他脚本,请单击“添加脚本”。 浏览到脚本的位置,然后单击“打开”。 然后,可以在“数据库脚本”部分选择它,并使用向上和向下箭头调整其执行顺序
    5. 最后一个选项“数据库部署说明”是可选的
    6. 立即保存对配置所做的更改,然后再继续。

配置了打包设置后,可以创建包。

从 Visual Studio 2010 生成包

  1. 在 VS 2010 中,从“解决方案资源管理器”中选择 WAP。

  2. 右键单击 WAP。

  3. 选择“生成部署包”
    Screenshot of the right-click menu with a focus on the Build Deployment Package option.

  4. 请注意,如果从未登录过 Contoso University,则 aspnetdb.mdf 文件不存在。 包创建将失败,并显示类似于以下内容的错误:“无法连接到数据库‘C:\code\ContosoUniversity\ContosoUniversity\ContosoUniversity\App_Data\aspnetdb.mdf’。 已成功与服务器建立连接,但在登录过程中发生错误。”

    • 若要修复此错误,只需按 F5 启动应用程序并注册用户即可。 这将创建 aspnetdb.mdf 文件。
  5. 输出窗口将在打包过程中提供更新。 打包完成后,输出将包含指向包位置的链接。
    Screenshot of the output window containing a link to the package location.

  6. 单击此链接即可打开包位置。
    Screenshot of MyStarterWAP screen that contains a package location U R L.

从 MSBuild 生成包

上面配置的所有设置都存储在 WAP 的项目文件中。 现在,你可以生成 WAP 或解决方案,并创建使用上述设置的包。

  1. 打开路径中带有 MSBuild 的命令提示符(例如,位于“开始”->“所有程序”->“Microsoft Visual Studio 2010”->“Visual Studio Tools”->“Visual Studio 命令提示符 (2010)”下的 VS 命令提示符)

  2. 导航到解决方案或项目文件。

  3. 如果要生成解决方案,命令将如下所示:

    msbuild {solution file} /p:CreatePackageOnPublish=true /p:DeployOnBuild=true
    

    如果要生成项目文件,命令将如下所示:

    msbuild {project file} /t:Package
    

    如果要生成除默认值以外的配置,请将以下内容添加到上述命令:

    /p:Configuration={Configuration Name}
    

从命令提示符部署包

现在我们有一个包,可以从命令提示符部署该包。 我们将以管理员身份部署该包。

若要使用远程代理服务以管理员身份部署包,请执行以下操作:

  1. 打开命令提示符
  2. 导航到生成包的位置。 可以在生成输出中找到此信息。 UI 的生成“输出”窗口中将有一个链接,在命令行中,该位置将在生成输出的 PackageUsingManifest 部分中列出
  3. 键入“{project name}.deploy.cmd /t /m:{destinationServerName} /u:{administratorUser} /p:{AdministratorPassword}”并按 Enter
  4. 如果跟踪发布生成了正确的结果,请重新运行不带 /t 参数的命令

有关使用命令文件进行部署的详细信息,可以键入 {project name}.deploy.cmd 以打开关联的自述文件,或访问此处的文章

使用 IIS 管理器部署包

还可使用 Internet Information Services (IIS) 管理器安装新创建的包。

若要使用 Internet Information Services 管理器部署包 (inetmgr),请执行以下操作:

  1. 运行 inetmgr.exe

  2. 在 inetmgr 中展开服务器节点。

  3. 展开“站点”节点

  4. 右键单击要将应用程序导入到的站点。

  5. 选择“部署”->“导入应用程序…”
    Screenshot of the right-click menu over the Connections pane, with a focus on the Deploy drop-down and Import Application option.

  6. 在“包路径:”文本框中输入包的位置

  7. 点击下一步

  8. 现在,你将位于“选择包的内容”屏幕。 通过选中和取消选中项,可以自定义安装的内容。 在此屏幕截图中,你将看到:

    • 有一个用于创建应用程序的项。
    • 站点的文件内容。
    • 在站点上配置 ACL 的两个项。
    • 数据库脚本。
      Screenshot of the Import Application Package screen with the Web Application option being highlighted in the Package contains field.
  9. 选择要安装的所需项后,单击“下一步”

  10. 现在,需要验证是否设置了包参数。

    • “应用程序路径”是安装应用程序的位置,因为我决定从 inetmgr 中的“默认网站”根目录节点导入,并且我可以在文本框中输入要安装的应用程序名称
    • 第一个 Connection String 参数是要将包脚本安装到的数据库
    • 第二个 Connection String 参数是要放置在 web.config 文件中的值。 这两个不同的参数将允许你以更高权限的用户身份安装数据库,并使用更低权限的帐户运行应用程序。
      Screenshot of the Import Application Package screen showing the Application Path and Connection String fields.
  11. 单击 “下一步”

  12. 如果应用程序存在,系统将提示你是否要删除额外的文件。 选择所需的选项,然后单击“下一步”
    Screenshot of the Overwrite Existing Files screen with a focus on the Next option.

  13. 你将知道位于摘要页面。 查看信息,然后单击“完成”
    Screenshot of the Installation Progress and Summary page with a focus on the Finish option.

  14. 现在,在 inetmgr 中,可以单击“管理应用程序”下的“浏览”链接来查看站点
    Screenshot of the Actions pane with a focus on the Browse link under the Manage Application section.