更改 Azure Web 应用中的目标框架

Gar*_*ary 9 azure azure-web-app-service asp.net-core azure-webapps

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

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

Ale*_*AIT 12

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

通用设置

从技术角度来说,它可以通过LinuxFxVersion以下方式访问:

    "siteProperties": {
      "metadata": null,
      "properties": [
        {
          "name": "LinuxFxVersion",
          "value": "DOTNETCORE|2.1"
        },
        {
          "name": "WindowsFxVersion",
          "value": null
        }
      ],
      "appSettings": null
    },
Run Code Online (Sandbox Code Playgroud)

例如通过Azure CLI

az webapp config set -g MyResourceGroup -n MyUniqueApp --linux-fx-version DOTNETCORE|2.1
Run Code Online (Sandbox Code Playgroud)

如果您想避免停机,您应该使用您提到的插槽。像每个应用程序部署一样,在部署过程中,您的应用程序会在短时间内非常缓慢。

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

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


Gar*_*ary 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 版本、os 版本等)。

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

在此处输入图片说明

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

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

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

第 5 步 - 发布应用

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