12

我想使用 Azure Web 应用程序将 ASP.NET Core 2.1 网站发布到 Azure 来托管它。在 Azure 门户上创建 Azure Web App 时,其中一项设置是“运行时堆栈”。在这种情况下,我会将其设置为“.NET Core 2.1”以匹配我的代码当前使用的框架。但是,一旦创建了 Web 应用程序,我在 Azure 门户上的任何位置都看不到编辑此设置的选项,那么如果将来有必要,我将如何更改它?

例如,如果我稍后更新我的应用程序代码以使用 ASP.NET Core 2.2,我将如何将 Azure Web 应用程序的运行时堆栈更改为“.NET Core 2.2”?在 Azure 门户的某些区域中是否有设置来编辑它?还是 Azure Web 应用程序查看代码(可能是 .csproj 文件),并在内部自动更新目标框架,从而忽略任何设置?还是我需要删除 Web 应用程序并创建一个具有正确设置的新应用程序?(如果我需要删除 Web 应用程序并创建一个新应用程序,是否有一些推荐的方法来计划这种情况并减少停机时间?是否可以将暂存槽从生产槽更新为更新的运行时堆栈,以及然后进行交换?)

4

3 回答 3

18

至少对于 Linux 主机,运行时堆栈可通过应用服务设置获得——它只是分为多个属性:

通用设置

在更技术性的说明中,可以通过以下方式访问它LinuxFxVersion

    "siteProperties": {
      "metadata": null,
      "properties": [
        {
          "name": "LinuxFxVersion",
          "value": "DOTNETCORE|2.1"
        },
        {
          "name": "WindowsFxVersion",
          "value": null
        }
      ],
      "appSettings": null
    },

例如通过Azure CLI

az webapp config set -g MyResourceGroup -n MyUniqueApp --linux-fx-version DOTNETCORE|2.1

如果你想避免停机,你应该使用你提到的插槽。与每个应用程序部署一样,在部署期间您的应用程序会在短时间内出现非常缓慢的情况。

如果您使用 Azure Pipelines 之类的东西,则可以一次性更改所有内容。Azure 应用服务部署任务允许您同时部署应用程序和设置运行时堆栈。

插槽彼此非常独立,因此您可以根据插槽拥有不同的运行时堆栈。

于 2019-07-11T20:42:58.980 回答
5

第 1 步 - 为项目设置目标框架

在项目中将目标框架设置为您想要的框架。在 VS 中,右键单击项目名称,选择属性,然后指定目标框架。

在此处输入图像描述

或者直接编辑 .csproj 文件指定目标框架,使用如下语法 <TargetFramework>netcoreapp3.1</TargetFramework>

第 2 步 - 设置发布的目标框架

发布项目时,还要在那里设置目标框架。在 VS 中,右键单击项目名称,选择发布,并在发布向导中指定目标框架。

在此处输入图像描述

此设置也将反映在 .pubxml 文件中(如果您更喜欢使用语法,也可以在那里编辑<TargetFramework>netcoreapp3.1</TargetFramework>

第 3 步 - 检查 Azure 上是否存在所需的运行时

如果 Azure 上存在项目和发布设置中指定的运行时版本,则将自动使用该版本。所以我们需要检查它是否存在。

Alex 在他的回答中描述了如何在 Linux 主机上执行此操作,但这在 Windows 主机上不起作用(Azure 门户上的 Windows 主机不显示“主要版本”和“次要版本”设置)。

在此处输入图像描述

另一方面,Kudu 控制台适用于两种操作系统。Kudu 可以到达https://<app_name>.scm.azurewebsites.net。有几种不同的方法可以查找运行时版本 Kudu -

选项 1. 单击 Rest API 部分中的“运行时版本”链接。

在此处输入图像描述 它将显示支持的 dotnetcore 版本(以及 nodejs 版本、操作系统版本等)。

选项 2. 单击 Debug Console -> CMD 启动 kudu 命令提示符。输入dotnet --list-runtimes.

在此处输入图像描述

(不要使用dotnet --list-sdks,因为重要的是运行时,而不是 sdk,因为构建应用程序需要 sdk,而且您很可能会在发布到 Azure 之前在本地计算机上构建应用程序)。

步骤 4 - 如果 Azure 上不存在运行时

如果您使用的运行时仍处于预览状态,则可能会出现这种情况。您可以在应用程序中嵌入您自己的 .net 核心版本,也可以使用扩展。塞巴斯蒂安在他的回答中描述了这些。

第 5 步 - 发布应用程序

无需删除现有的 Web 应用程序并创建一个新的。您可以发布到以前使用较低目标框架的旧应用程序。

于 2020-03-11T22:42:34.410 回答
3

上一个答案是正确的,您可以在应用程序设置配置中管理运行时版本。

但是,您也可以运行dotnet publish --runtime win-x86以在您的应用程序中嵌入您自己的 .Net Core 版本。它增加了一些开销,但您可以控制运行时版本。

.NET Core RID 目录

第三种选择是安装站点扩展

在此处输入图像描述

于 2019-07-12T00:34:21.753 回答