概述

托管和部署 ASP.NET Core

一般而言,向托管环境部署 ASP.NET Core 应用需执行以下操作:

  • 将已发布应用部署到托管服务器上的文件夹。
  • 设置进程管理器,该管理器在收到请求时启动应用,并在应用发生故障或服务器重启后重新启动应用。
  • 对于反向代理配置,将反向代理设置为将请求转发到应用。

发布到文件夹

dotnet publish 命令编译应用代码,并复制在“发布” 文件夹中运行应用所需的文件。 使用 Visual Studio 进行部署时,自动先执行 dotnet publish 步骤,再将文件复制到部署目标。

文件夹内容

“发布” 文件夹包含一个或多个应用程序集文件、依赖项以及(可选).NET 运行时。

.NET Core 应用可以发布为“独立式部署” ,也可以发布为“依赖框架的部署” 。 如果应用是独立式,“发布” 文件夹中有包含 .NET 运行时的程序集文件。 如果应用依赖于框架,.NET 运行时文件就不包含在内,因为应用包含对服务器上安装的 .NET 版本的引用。 默认部署模型是依赖于框架的模型。 有关详细信息,请参阅 .NET Core 应用程序部署

除了“.exe” 和“.dll” 文件以外,ASP.NET Core 应用的“发布” 文件夹通常包含配置文件、静态资产和 MVC 视图。 有关详细信息,请参阅 ASP.NET Core 目录结构

设置进程管理器

ASP.NET Core 应用是一个控制台应用,在服务器启动时必须启动该应用,并且在出现故障后必须重新启动它。 若要自动启动和重新启动,需要使用进程管理器。 用于 ASP.NET Core 的最常见进程管理器是:

设置反向代理

如果应用使用 Kestrel 服务器,NginxApacheIIS 可用作反向代理服务器。 反向代理服务器接收来自 Internet 的 HTTP 请求,并将这些请求转发到 Kestrel。

无论配置是否使用反向代理服务器,都是受支持的托管配置。 有关详细信息,请参阅何时结合使用 Kestrel 和反向代理

代理服务器和负载均衡器方案

对于托管在代理服务器和负载均衡器后方的应用,可能需要附加配置。 如不提供附加配置,应用可能无法访问方案 (HTTP/HTTPS) 和发出请求的远程 IP 地址。 有关详细信息,请参阅配置 ASP.NET Core 以使用代理服务器和负载均衡器

使用 Visual Studio 和 MSBuild 自动执行部署

除将输出从 dotnet publish 复制到服务器外,部署通常还需要其他任务。 例如,可能需要从“发布” 文件夹获取或排除额外文件。 Visual Studio 使用 MSBuild 进行 Web 部署,用户可以自定义 MSBuild 以在部署期间执行其他任务。 有关详细信息,请参阅 用于 ASP.NET Core 应用部署的 Visual Studio 发布配置文件 (.pubxml)使用 MSBuild 和 Team Foundation Build 一书。

通过发布 Web 功能内置 Git 支持,可以将应用从 Visual Studio 直接部署到 Azure 应用服务。 Azure DevOps Services 支持对 Azure 应用服务进行持续部署 有关详细信息,请参阅通过 ASP.NET Core 和 Azure 实现 DevOps

发布到 Azure

有关如何使用 Visual Studio 将应用发布到 Azure 的说明,请参阅 使用 Visual Studio 将 ASP.NET Core 应用发布到 Azure 在 Azure 中创建 ASP.NET Core Web 应用提供了其他示例。

在 Windows 中使用 MSDeploy 发布

请参阅 用于 ASP.NET Core 应用部署的 Visual Studio 发布配置文件 (.pubxml),了解如何使用 Visual Studio 发布配置文件发布应用,其中包括在 Windows 命令提示符处使用 dotnet msbuild 命令。

Internet 信息服务 (IIS)

要使用 web.config 文件提供的配置部署到 Internet Information Services (IIS),请参阅 使用 IIS 在 Windows 上托管 ASP.NET Core 下的文章 。

在 Web 场中托管

有关如何配置在 Web 场环境中托管 ASP.NET Core 应用(例如,部署应用的多个实例以实现可伸缩性)的信息,请参阅 在 Web 场中托管 ASP.NET Core

在 Docker 中托管

有关详细信息,请参阅 在 Docker 容器中托管 ASP.NET Core

执行运行状况检查

使用运行状况检查中间件,对应用及其依赖项执行运行状况检查。 有关详细信息,请参阅 ASP.NET Core 中的运行状况检查

其他资源

一般而言,向托管环境部署 ASP.NET Core 应用需执行以下操作:

  • 将已发布应用部署到托管服务器上的文件夹。
  • 设置进程管理器,该管理器在收到请求时启动应用,并在应用发生故障或服务器重启后重新启动应用。
  • 对于反向代理配置,将反向代理设置为将请求转发到应用。

发布到文件夹

dotnet publish 命令编译应用代码,并复制在“发布” 文件夹中运行应用所需的文件。 使用 Visual Studio 进行部署时,自动先执行 dotnet publish 步骤,再将文件复制到部署目标。

文件夹内容

“发布” 文件夹包含一个或多个应用程序集文件、依赖项以及(可选).NET 运行时。

.NET Core 应用可以发布为“独立式部署” ,也可以发布为“依赖框架的部署” 。 如果应用是独立式,“发布” 文件夹中有包含 .NET 运行时的程序集文件。 如果应用依赖于框架,.NET 运行时文件就不包含在内,因为应用包含对服务器上安装的 .NET 版本的引用。 默认部署模型是依赖于框架的模型。 有关详细信息,请参阅 .NET Core 应用程序部署

除了“.exe” 和“.dll” 文件以外,ASP.NET Core 应用的“发布” 文件夹通常包含配置文件、静态资产和 MVC 视图。 有关详细信息,请参阅 ASP.NET Core 目录结构

设置进程管理器

ASP.NET Core 应用是一个控制台应用,在服务器启动时必须启动该应用,并且在出现故障后必须重新启动它。 若要自动启动和重新启动,需要使用进程管理器。 用于 ASP.NET Core 的最常见进程管理器是:

设置反向代理

如果应用使用 Kestrel 服务器,NginxApacheIIS 可用作反向代理服务器。 反向代理服务器接收来自 Internet 的 HTTP 请求,并将这些请求转发到 Kestrel。

无论配置是否使用反向代理服务器,都是受支持的托管配置。 有关详细信息,请参阅何时结合使用 Kestrel 和反向代理

代理服务器和负载均衡器方案

对于托管在代理服务器和负载均衡器后方的应用,可能需要附加配置。 如不提供附加配置,应用可能无法访问方案 (HTTP/HTTPS) 和发出请求的远程 IP 地址。 有关详细信息,请参阅配置 ASP.NET Core 以使用代理服务器和负载均衡器

使用 Visual Studio 和 MSBuild 自动执行部署

除将输出从 dotnet publish 复制到服务器外,部署通常还需要其他任务。 例如,可能需要从“发布” 文件夹获取或排除额外文件。 Visual Studio 使用 MSBuild 进行 Web 部署,用户可以自定义 MSBuild 以在部署期间执行其他任务。 有关详细信息,请参阅 用于 ASP.NET Core 应用部署的 Visual Studio 发布配置文件 (.pubxml)使用 MSBuild 和 Team Foundation Build 一书。

通过发布 Web 功能内置 Git 支持,可以将应用从 Visual Studio 直接部署到 Azure 应用服务。 Azure DevOps Services 支持对 Azure 应用服务进行持续部署 有关详细信息,请参阅通过 ASP.NET Core 和 Azure 实现 DevOps

发布到 Azure

有关如何使用 Visual Studio 将应用发布到 Azure 的说明,请参阅 使用 Visual Studio 将 ASP.NET Core 应用发布到 Azure 在 Azure 中创建 ASP.NET Core Web 应用提供了其他示例。

在 Windows 中使用 MSDeploy 发布

请参阅 用于 ASP.NET Core 应用部署的 Visual Studio 发布配置文件 (.pubxml),了解如何使用 Visual Studio 发布配置文件发布应用,其中包括在 Windows 命令提示符处使用 dotnet msbuild 命令。

Internet 信息服务 (IIS)

要使用 web.config 文件提供的配置部署到 Internet Information Services (IIS),请参阅 使用 IIS 在 Windows 上托管 ASP.NET Core 下的文章 。

在 Web 场中托管

有关如何配置在 Web 场环境中托管 ASP.NET Core 应用(例如,部署应用的多个实例以实现可伸缩性)的信息,请参阅 在 Web 场中托管 ASP.NET Core

在 Docker 中托管

有关详细信息,请参阅 在 Docker 容器中托管 ASP.NET Core

其他资源