使用 Visual Studio ASP.NET Web 部署:简介

作者 :Tom Dykstra

下载初学者项目

本系列教程介绍如何将 visual Studio 2012 与适用于 .NET 的 Azure SDK 配合使用,将 (发布) ASP.NET Web 应用程序部署到Azure 应用服务 Web 应用或第三方托管提供程序。 Visual Studio 2013的大多数过程都类似。

开发 Web 应用程序是为了通过 Internet 向用户提供它。 但 Web 编程教程通常会在演示了如何在开发计算机上获取工作内容后立即停止。 本系列教程从其他人离开的地方开始:你已生成 Web 应用,对其进行了测试,并且它已准备就绪。 下一步操作 这些教程介绍了如何首先部署到本地开发计算机上的 IIS 进行测试,然后部署到 Azure 或第三方托管提供程序进行过渡和生产。 要部署的示例应用程序是使用 Entity Framework、SQL Server 和 ASP.NET 成员资格系统的 Web 应用程序项目。 示例应用程序使用 ASP.NET Web Forms,但显示的过程也适用于 ASP.NET MVC 和 Web API。

这些教程假定你知道如何在 Visual Studio 中使用 ASP.NET。 如果没有,最好从基本 ASP.NET Web Forms教程基本 ASP.NET MVC 教程开始。

如果有与本教程不直接相关的问题,可以发布到 ASP.NET 部署论坛StackOverflow

概述

这些教程指导你部署包含SQL Server数据库的 ASP.NET Web 应用程序。 首先部署到本地开发计算机上的 IIS 进行测试,然后在 Azure 应用服务 和 Azure SQL 数据库中Web 应用,以便进行过渡和生产。 你将了解如何使用 Visual Studio 一键式发布进行部署,并了解如何使用命令行进行部署。

教程的数量可能会使部署过程看起来令人望而生畏。 事实上,基本过程很简单。 但是,在实际情况下,通常需要执行额外的部署任务,例如,在目标服务器上设置文件夹权限。 我们演示了其中一些附加任务,希望教程不会遗漏可能妨碍你成功部署真实应用程序的信息。

教程旨在按顺序运行,每个部分都基于上一部分进行构建。 可以跳过与你的情况无关的部分,但可能需要在后面的教程中调整过程。

目标受众

本教程面向在以下环境中工作的 ASP.NET 开发人员:

  • 生产环境Azure 应用服务 Web 应用或第三方托管提供程序。
  • 部署不仅限于持续集成过程,可以直接从 Visual Studio 完成。

这些教程中未介绍使用持续交付过程从源代码管理进行部署,但一个演示如何从命令行进行部署的教程除外。 有关持续交付的信息,请参阅以下资源:

使用第三方托管提供程序

本教程将指导你完成设置 Azure 帐户并将应用程序部署到Azure 应用服务中Web 应用的过程,以便进行过渡和生产。 但是,可以使用相同的基本过程部署到所选的第三方托管提供程序。 教程将介绍 Azure 特有的流程,介绍这一点,并建议第三方托管提供商预期存在哪些差异。

部署 Web 应用项目

为这些教程下载和部署的示例应用程序是 Visual Studio Web 应用程序项目。 但是,如果安装最新的 Visual Studio Web 发布更新,则可以对 Web 应用项目使用相同的部署方法和工具。

部署 ASP.NET MVC 项目

示例应用程序是一个 ASP.NET Web Forms项目,但所学的所有内容也适用于 ASP.NET MVC。 Visual Studio MVC 项目只是 Web 应用程序项目的另一种形式。 唯一的区别是,如果要部署到不支持 ASP.NET MVC 或目标版本的托管提供程序,则必须确保在项目中安装了相应的 MVC 3、MVC 4 或 MVC 5) NuGet 包的 (MVC 3、MVC 4 或 MVC 5。

编程语言

示例应用程序使用 C#,但教程不需要 C# 知识,并且教程显示的部署技术并非特定于语言。

数据库部署方法

可通过三种方法在 Visual Studio 中部署SQL Server数据库以及 Web 部署:

  • Entity Framework Code First 迁移
  • dbDacFx Web 部署提供程序
  • dbFullSql Web 部署提供程序

在本教程中,你将使用其中前两种方法。 dbFullSql Web 部署提供程序是一种旧方法,除了某些特定方案(例如从 SQL Server Compact 迁移到 SQL Server)外,不建议使用此方法。

本教程中显示的方法适用于SQL Server数据库,而不是SQL Server Compact。 有关如何部署SQL Server Compact数据库的信息,请参阅 Visual Studio Web Deployment with SQL Server Compact

本教程中显示的方法要求使用 Web 部署发布方法。 如果更喜欢其他发布方法(如 FTP、文件系统或 FPSE),请参阅在 Visual Studio 的 Web 部署内容映射中将数据库与 Web 应用程序部署分开 部署,并 ASP.NET。

Entity Framework Code First 迁移

在 Entity Framework 版本 4.3 中,Microsoft 引入了Code First 迁移。 Code First 迁移自动执行对数据模型进行增量更改并将这些更改传播到数据库的过程。 在早期版本的 Code First 中,每次更改数据模型时,通常都允许删除实体框架并重新创建数据库。 这在开发中不是问题,因为测试数据很容易重新创建,但在生产环境中,通常需要在不删除数据库的情况下更新数据库架构。 迁移功能使 Code First 无需删除并重新创建数据库即可更新数据库。 可以让 Code First 自动决定如何进行所需的架构更改,也可以编写自定义更改的代码。 有关Code First 迁移简介,请参阅 Code First 迁移

部署 Web 项目时,Visual Studio 可以自动执行部署由 Code First 迁移 管理的数据库的过程。 创建发布配置文件时,请选择标记为“执行Code First 迁移 (应用程序启动) 上运行”的检查框。 此设置会导致部署过程在目标服务器上自动配置应用程序 Web.config 文件,以便 Code First 使用 MigrateDatabaseToLatestVersion 初始值设定项类。

在部署过程中,Visual Studio 不会对数据库执行任何操作。 当部署的应用程序在部署后首次访问数据库时,Code First 会自动创建数据库或将数据库架构更新到最新版本。 如果应用程序实现迁移种子方法,则该方法在创建数据库或更新架构后运行。

在本教程中,你将使用 Code First 迁移 部署应用程序数据库。

dbDacFx Web 部署提供程序

对于不是由 Entity Framework Code First 管理的SQL Server数据库,可以在配置发布配置文件时选择标记为“更新数据库”的检查框。 在初始部署期间,dbDacFx 提供程序在目标数据库中创建表和其他数据库对象,以匹配源数据库。 在后续部署中,提供程序确定源数据库和目标数据库之间的差异,并更新目标数据库的架构以匹配源数据库。 默认情况下,提供程序不会进行任何导致数据丢失的更改,例如删除表或列时。

此方法不会自动部署数据库表中的数据,但你可以创建脚本来执行此操作,并将 Visual Studio 配置为在部署期间运行它们。 在部署期间运行脚本的另一个原因是进行不能自动执行的架构更改,因为它们会导致数据丢失。

在本教程中,你将使用 dbDacFx 提供程序部署 ASP.NET 成员资格数据库。

本教程期间的故障排除

部署期间发生错误,或者部署的站点未正确运行时,错误消息并不总是提供明显的解决方案。 为了帮助你解决一些常见问题方案,我们提供了 故障排除参考页 。 如果在完成教程时收到错误消息或某些内容不起作用,请确保检查故障排除页面。

欢迎评论

欢迎对教程发表评论,在更新教程时,将尽一切努力考虑教程注释中提供的更正或改进建议。

先决条件

本教程针对以下产品编写:

可以使用 Visual Studio 2010 SP1 或 Visual Studio 2013来学习本教程,但某些屏幕截图会有所不同,某些功能会有所不同。

如果使用 Visual Studio 2013,请安装适用于 Visual Studio 2013 的 Azure SDK

如果使用的是 Visual Studio 2010 SP1,请安装以下软件:

根据计算机上已有的 SDK 依赖项数量,安装 Azure SDK 可能需要很长时间,从几分钟到半小时或更长。 即使计划发布到第三方托管提供商而不是 Azure,也需要 Azure SDK,因为 SDK 包含 Visual Studio Web 发布功能的最新更新。

注意

本教程是使用 Azure SDK 版本 1.8.1 编写的。 此后,发布了具有其他功能的较新版本。 教程已更新为提及这些功能,并链接到包含有关这些功能的详细信息的资源。

说明和屏幕截图基于Windows 8,但教程介绍了 Windows 7 的差异。

若要完成本教程,需要其他一些软件,但你尚未安装该软件。 本教程将引导你完成在需要时安装它的步骤。

下载示例应用程序

要部署的应用程序名为 Contoso University,并且已为你创建。 它是一个大学网站的简化版本,基于 ASP.NET 网站上的实体框架教程中所述的 Contoso University 应用程序。

安装必备组件后,下载 Contoso University Web 应用程序.zip 文件包含项目的多个版本。 若要完成本教程的步骤,请从 C# 文件夹中的项目开始。 若要查看教程末尾的项目外观,请在 ContosoUniversity-End 文件夹中打开该项目。

若要准备项目以完成教程步骤,请执行以下步骤:

  1. 将 C# 文件夹中的 ContosoUniversity 解决方案文件保存在用于处理 Visual Studio 项目的任何文件夹中名为 ContosoUniversity 的文件夹中。

    默认情况下,这是 Visual Studio 2012 的以下文件夹:

    C:\Users\<username>\Documents\Visual Studio 2012\Projects

    (对于本教程中的屏幕截图,项目文件夹位于 C:drive.)

  2. 启动 Visual Studio 并打开项目。

  3. “解决方案资源管理器”中,右键单击解决方案,然后单击“启用NuGet 包还原”。

  4. 生成解决方案。

  5. 如果出现编译错误,请手动还原 NuGet 包:

    1. “解决方案资源管理器”中,右键单击解决方案,然后单击“管理解决方案的 NuGet 包”。
    2. 在“ 管理 NuGet 包 ”对话框顶部,你将看到 此解决方案中缺少一些 NuGet 包。单击以还原。 单击“ 还原” 按钮。
    3. 重新生成解决方案。
  6. 按 Ctrl+F5 运行应用程序。

    应用程序将打开 Contoso University 主页。

    主页开发

    (Visual Studio 启动 SQL Server Express LocalDB 实例时可能会等待一段时间,如果此过程花费的时间过长,可能会收到超时错误。在这种情况下,只需再次启动项目。)

可从菜单栏访问网站页面,并允许您执行以下功能:

  • (“关于”页) 显示学生统计信息。
  • 显示、编辑、删除和添加学生。
  • 显示和编辑课程。
  • 显示和编辑讲师。
  • 显示和编辑部门。

下面是几个具有代表性的页面的屏幕截图。

学生页面开发

添加学生页面开发

查看影响部署的应用程序功能

应用程序的以下功能会影响其部署方式或部署它所要执行的操作。 本系列的以下教程将更详细地介绍其中每个内容。

  • Contoso University 使用SQL Server数据库来存储应用程序数据,例如学生和教师姓名。 数据库包含测试数据和生产数据的组合,在部署到生产环境时,需要排除测试数据。
  • 应用程序使用 ASP.NET 成员身份系统,该系统将用户帐户信息存储在 SQL Server 数据库中。 应用程序定义有权访问某些受限信息的管理员用户。 需要使用管理员帐户部署成员身份数据库,而无需测试帐户。
  • 应用程序使用第三方错误日志记录和报告实用工具。 此实用工具在必须随应用程序一起部署的程序集中提供。
  • 错误日志记录实用工具将 XML 文件中的错误信息写入文件文件夹。 必须确保 ASP.NET 在部署的站点中运行的帐户对此文件夹具有写入权限,并且必须从部署中排除此文件夹。 (否则,可能会将测试环境中的错误日志数据部署到生产环境,并且/或可能会删除生产错误日志文件。)
  • 该应用程序包括一些必须在部署 Web.config 文件中更改的设置,具体取决于目标环境 (测试、过渡或生产) ,以及其他必须更改的设置,具体取决于生成配置 (调试或发布) 。
  • Visual Studio 解决方案包括类库项目。 应仅部署此项目生成的程序集,而不是项目本身。

总结

在本系列的第一个教程中,你已下载示例 Visual Studio 项目,并查看了影响应用程序部署方式的网站功能。 在以下教程中,通过设置要自动处理的某些操作来准备部署。 手动处理的其他项。