通过


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

作者:Tom Dykstra

下载入门项目

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

你开发一个 Web 应用程序,以便通过 Internet 向用户提供它。 但是,Web 编程教程通常在演示了如何在开发计算机上让某些功能工作后就停止了。 本系列教程从其他人离开的位置开始:你已经构建了一个 Web 应用,对其进行了测试,并且它已准备就绪。 接下来会发生什么? 这些教程演示了如何首先部署到本地开发计算机上的 IIS 进行测试,然后再部署到 Azure 或第三方托管提供商进行预生产和生产。 要部署的示例应用程序是一个使用 Entity Framework、SQL Server 和 ASP.NET 成员身份系统的 Web 应用程序项目。 示例应用程序使用 ASP.NET Web 窗体,但所示的过程也适用于 ASP.NET MVC 和 Web API。

这些教程假设你知道如何在 Visual Studio 中使用 ASP.NET。 如果没有,最好是基本 ASP.NET Web 窗体教程基本 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 窗体项目,但所学的一切也适用于 ASP.NET MVC。 Visual Studio MVC 项目只是 Web 应用程序项目的另一种形式。 唯一的区别是,如果要部署到不支持 ASP.NET MVC 的托管提供程序或目标版本的托管提供程序,则必须确保已在项目中安装适当的 (MVC 3MVC 4MVC 5) NuGet 包。

编程语言

示例应用程序使用 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 和 ASP.NET 的 Web 部署内容映射中参阅 将数据库与 Web 应用部署分开进行

Entity Framework Code First 迁移

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

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

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

在本教程中,你将使用 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,并且已为你创建。 它是一个简化版的大学网站,参考了 Contoso University 应用程序,如 ASP.NET 网站上的 Entity Framework 教程中所述。

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

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

  1. 请将 ContosoUniversity 解决方案文件从 C# 文件夹中保存到您用于处理 Visual Studio 项目的任意文件夹中的一个名为 ContosoUniversity 的文件夹中。

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

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

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

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

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

  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 项目并查看了影响应用程序部署方式的网站功能。 在以下教程中,通过设置要自动处理的其中一些内容来准备部署。 你手动处理的其他任务。