代码之家  ›  专栏  ›  技术社区  ›  Gary

在Azure web应用程序中更改目标框架

  •  0
  • Gary  · 技术社区  · 6 年前

    我想发布一个ASP。NET Core 2.1网站到Azure,使用Azure Web应用程序托管。在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应用并创建一个具有正确设置的新应用吗?(如果我需要删除web应用程序并创建一个新的应用程序,是否有一些建议的方法来规划这种情况并减少停机时间?是否有可能将暂存槽从生产槽更新为较新的运行时堆栈,然后进行交换?)

    0 回复  |  直到 6 年前
        1
  •  18
  •   Alex AIT    6 年前

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

    General Settings

    更技术性的说明是,可以通过 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 App Service Deploy Task 允许您同时部署应用程序和设置运行时堆栈。

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

        2
  •  5
  •   Gary    6 年前

    1.为项目设定目标框架

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

    enter image description here

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

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

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

    enter image description here

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

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

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

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

    enter image description here

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

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

    enter image description here 会的 显示支持的dotnetcore版本(以及nodejs版本, 操作系统版本等)。

    选择2。单击调试控制台->CMD将启动kudu 命令提示符。输入 dotnet --list-runtimes .

    enter image description here

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

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

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

    第5步-发布应用程序

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

        3
  •  3
  •   Sebastien GISSINGER    6 年前

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

    但是,你也可以跑步 dotnet publish --runtime win-x86 嵌入你自己的。Net核心版本与您的应用程序。 它增加了一些开销,但可以控制运行时版本。

    .NET Core RID Catalog

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

    enter image description here

    推荐文章