更改 Azure Web 应用中的目标框架
Changing the target framework in an Azure web app
我想发布一个 ASP.NET Core 2.1 网站到 Azure,使用 Azure Web App 来托管它。在 Azure 门户上创建 Azure Web App 时,其中一项设置是 "Runtime Stack"。在这种情况下,我会将其设置为“.NET Core 2.1”以匹配我的代码当前使用的框架。但是,一旦创建了 Web 应用程序,我在 Azure 门户上的任何地方都看不到编辑此设置的选项,所以如果将来需要,我将如何更改它?
例如,如果我稍后更新我的应用程序代码以使用 ASP.NET Core 2.2,我将如何将 Azure Web 应用程序的运行时堆栈更改为“.NET Core 2.2”?在 Azure 门户的某些区域是否有编辑它的设置?或者 Azure Web 应用程序是否查看代码(可能是 .csproj 文件),并在内部自动更新目标框架,从而忽略任何设置?或者我是否需要删除网络应用程序并创建一个具有正确设置的新应用程序? (如果我需要删除网络应用程序并创建一个新应用程序,是否有一些推荐的方法来计划这种情况并减少停机时间?是否可以将暂存槽从生产槽更新到更新的运行时堆栈,并且然后交换?)
至少对于 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 App Service Deploy Task 允许您同时部署应用程序和设置运行时堆栈。
插槽彼此非常独立,因此您可以根据插槽拥有不同的运行时堆栈。
前一个答案是正确的,您可以在应用程序设置配置中管理运行时间版本。
但是,您也可以 运行 dotnet publish --runtime win-x86
将您自己的 .Net Core 版本嵌入到您的应用程序中。
它增加了一些开销,但您可以控制 运行 时间版本。
第三个选项是安装站点扩展
第 1 步 - 设置项目的目标框架
在项目中将目标框架设置为您想要的。在VS中,右击项目名称,选择ose Properties,然后指定目标框架。
或者直接编辑.csproj文件指定目标框架,语法如下
<TargetFramework>netcoreapp3.1</TargetFramework>
步骤 2 - 设置发布的目标框架
在发布项目时,也在那里设置目标框架。在VS中,右击项目名称,选择ose发布,在发布向导中指定目标框架。
此设置也将反映在 .pubxml 文件中(如果您更喜欢使用语法 <TargetFramework>netcoreapp3.1</TargetFramework>
,可以在那里进行编辑)
步骤 3 - 检查 Azure 上是否存在您需要的运行时
如果 Azure 上存在项目和发布设置中指定的运行时版本,则将自动使用该版本。所以我们需要检查它是否存在。
Alex 在他的回答中描述了如何在 Linux hosts 上执行此操作,但这在 Windows hosts 上不起作用('Major Version' 和 'Minor Version' 设置不会显示在 Azure 门户上的 Windows hosts)。
另一方面,Kudu 控制台适用于两种操作系统。可以在 https://<app_name>.scm.azurewebsites.net
到达 Kudu。有几种不同的方法可以查找运行时版本 Kudu -
选项 1. 单击其余 API 部分中的 'Runtime versions' link。
它会
显示支持的 dotnetcore 版本(以及 nodejs 版本,
os 版本等)。
选项 2. 单击调试控制台 -> CMD 启动 kudu
命令提示符。输入 dotnet --list-runtimes
.
(不要使用 dotnet --list-sdks
,因为重要的是运行时,而不是 sdk,因为构建应用程序需要 sdk,而且 most 很可能你会构建应用程序发布到 Azure 之前的本地计算机)。
步骤 4 - 如果 Azure 上不存在运行时
如果您使用的运行时仍处于预览状态,则可能会出现这种情况。您可以在应用程序中嵌入您自己的 .net 核心版本,也可以使用扩展。塞巴斯蒂安在他的回答中描述了这些。
第 5 步 - 发布应用程序
不需要删除现有的网络应用程序并创建一个新的。您可以发布到以前使用较低目标框架的旧应用程序。
我想发布一个 ASP.NET Core 2.1 网站到 Azure,使用 Azure Web App 来托管它。在 Azure 门户上创建 Azure Web App 时,其中一项设置是 "Runtime Stack"。在这种情况下,我会将其设置为“.NET Core 2.1”以匹配我的代码当前使用的框架。但是,一旦创建了 Web 应用程序,我在 Azure 门户上的任何地方都看不到编辑此设置的选项,所以如果将来需要,我将如何更改它?
例如,如果我稍后更新我的应用程序代码以使用 ASP.NET Core 2.2,我将如何将 Azure Web 应用程序的运行时堆栈更改为“.NET Core 2.2”?在 Azure 门户的某些区域是否有编辑它的设置?或者 Azure Web 应用程序是否查看代码(可能是 .csproj 文件),并在内部自动更新目标框架,从而忽略任何设置?或者我是否需要删除网络应用程序并创建一个具有正确设置的新应用程序? (如果我需要删除网络应用程序并创建一个新应用程序,是否有一些推荐的方法来计划这种情况并减少停机时间?是否可以将暂存槽从生产槽更新到更新的运行时堆栈,并且然后交换?)
至少对于 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 App Service Deploy Task 允许您同时部署应用程序和设置运行时堆栈。
插槽彼此非常独立,因此您可以根据插槽拥有不同的运行时堆栈。
前一个答案是正确的,您可以在应用程序设置配置中管理运行时间版本。
但是,您也可以 运行 dotnet publish --runtime win-x86
将您自己的 .Net Core 版本嵌入到您的应用程序中。
它增加了一些开销,但您可以控制 运行 时间版本。
第三个选项是安装站点扩展
第 1 步 - 设置项目的目标框架
在项目中将目标框架设置为您想要的。在VS中,右击项目名称,选择ose Properties,然后指定目标框架。
或者直接编辑.csproj文件指定目标框架,语法如下
<TargetFramework>netcoreapp3.1</TargetFramework>
步骤 2 - 设置发布的目标框架
在发布项目时,也在那里设置目标框架。在VS中,右击项目名称,选择ose发布,在发布向导中指定目标框架。
此设置也将反映在 .pubxml 文件中(如果您更喜欢使用语法 <TargetFramework>netcoreapp3.1</TargetFramework>
,可以在那里进行编辑)
步骤 3 - 检查 Azure 上是否存在您需要的运行时
如果 Azure 上存在项目和发布设置中指定的运行时版本,则将自动使用该版本。所以我们需要检查它是否存在。
Alex 在他的回答中描述了如何在 Linux hosts 上执行此操作,但这在 Windows hosts 上不起作用('Major Version' 和 'Minor Version' 设置不会显示在 Azure 门户上的 Windows hosts)。
另一方面,Kudu 控制台适用于两种操作系统。可以在 https://<app_name>.scm.azurewebsites.net
到达 Kudu。有几种不同的方法可以查找运行时版本 Kudu -
选项 1. 单击其余 API 部分中的 'Runtime versions' link。
选项 2. 单击调试控制台 -> CMD 启动 kudu
命令提示符。输入 dotnet --list-runtimes
.
(不要使用 dotnet --list-sdks
,因为重要的是运行时,而不是 sdk,因为构建应用程序需要 sdk,而且 most 很可能你会构建应用程序发布到 Azure 之前的本地计算机)。
步骤 4 - 如果 Azure 上不存在运行时
如果您使用的运行时仍处于预览状态,则可能会出现这种情况。您可以在应用程序中嵌入您自己的 .net 核心版本,也可以使用扩展。塞巴斯蒂安在他的回答中描述了这些。
第 5 步 - 发布应用程序
不需要删除现有的网络应用程序并创建一个新的。您可以发布到以前使用较低目标框架的旧应用程序。