将 ASP.NET Core 6 应用部署到现有的 Azure 应用服务?
Posted
技术标签:
【中文标题】将 ASP.NET Core 6 应用部署到现有的 Azure 应用服务?【英文标题】:Deploy ASP.NET Core 6 app to existing Azure App Service? 【发布时间】:2021-11-09 00:30:30 【问题描述】:根据今天发布的ASP.NET Core 6 发布公告,据我了解,.NET 6 will be immediately available(“第 0 天 支持”)通过抢先体验获得 Azure 应用服务:
我们很高兴地宣布,App Service 正在第 0 天在 Windows 和 Linux App Service 计划的所有公共区域和场景中推出对 .NET 6.0 应用程序的支持.
在将我的 ASP.NET Core 应用程序升级到 ASP.NET Core 6、配置我的 Azure App Service 以使用 .NET 6 并将我的应用程序发布到我现有的 Azure App Service 之后,我收到一个 HTTP 错误 500.31具体信息:
找不到框架“Microsoft.NETCore.App”,版本“6.0.0”(x64)。
值得注意的是,它列出的唯一可用的 .NET 6 运行时是 RC2 (6.0.0-rc.2.21480.5
),而不是今天的发布版本。
升级步骤
为此,我执行了以下步骤:
项目文件 (csproj
):更新了<TargetFramework />
以定位net6.0
发布配置文件 (pubxml
):更新了<TargetFramework />
以定位net6.0
项目文件 (csproj
):将所有Microsoft.AspNetCore.*
NuGet 包更新为6.0.0
Azure 应用服务配置:将 .NET 版本更新为“.NET 6(抢先体验)”
错误信息
但是,当访问我的 Azure 应用服务站点 with detailed errors enabled 时,我收到以下错误:
HTTP 错误 500.31 - ANCM 未能找到本机依赖项
此问题的常见解决方案:
未找到指定版本的 Microsoft.NetCore.App 或 Microsoft.AspNetCore.App。
ANCM 检测到的具体错误:
It was not possible to find any compatible framework version The framework 'Microsoft.NETCore.App', version '6.0.0' (x64) was not found. The following frameworks were found: 2.2.14 at [D:\Program Files\dotnet\shared\Microsoft.NETCore.App] 3.0.3 at [D:\Program Files\dotnet\shared\Microsoft.NETCore.App] 3.1.15 at [D:\Program Files\dotnet\shared\Microsoft.NETCore.App] 3.1.18 at [D:\Program Files\dotnet\shared\Microsoft.NETCore.App] 5.0.7 at [D:\Program Files\dotnet\shared\Microsoft.NETCore.App] 5.0.9 at [D:\Program Files\dotnet\shared\Microsoft.NETCore.App] 6.0.0-rc.2.21480.5 at [D:\Program Files\dotnet\shared\Microsoft.NETCore.App] You can resolve the problem by installing the specified framework and/or SDK. The specified framework can be found at: https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=6.0.0&arch=x64&rid=win10-x64
其他信息
我已经重新启动了我的 Azure 应用服务(显然!) 我已经等待(一个多小时)通过抢先体验安装运行时 我正在使用Framework-dependent
部署模式发布我的 Web 应用程序
我没有通过 Azure 应用服务扩展配置任何 .NET 运行时
我没有配置AspNetCoreModule
(V2
)(ASP.NET Core 3 需要)
此 Azure 应用服务计划位于美国中南部地区
我从今天发布的 Visual Studio 2022 发布
混合消息
虽然上面引用的 Azure App Service update 暗示会有“day 0 支持”,但 the ASP.NET Core 6 announcement 的承诺较少:
在撰写本文时,.NET 6 正在积极部署到全球服务器网络,并配置为构建和运行 .NET 6 应用程序……这应该会在本周末结束
我认为 GitHub 上的 Azure 更新将是最权威的来源,但可能存在 Azure 团队尚未确认的部署问题?
相关主题
我之前发布了两个与将早期版本的 ASP.NET Core Web 应用程序发布到 Azure 应用服务相关的问题,并且遵循了与这些帖子相关的解决方案,但无济于事:
Error publishing an ASP.NET Core 3.1 site to Azure from Visual Studio 2019 Deploy ASP.NET Core 5 app to existing Azure App Service?问题
如何使用 Early Access 计划将 ASP.NET Core 6 应用的发布版本部署到 Azure 应用服务?这还准备好了吗(根据the Azure App Service announcement)?还是我们需要等到周末(根据the ASP.NET Core 6 announcement)?
理想情况下,我希望利用 Early Access 而不用我的应用程序分发运行时(作为自包含分发)或通过扩展安装运行时。显然,这些仍然是选项,但抢先体验的前提是它们不应该是必需的。
【问题讨论】:
您使用的 Visual Studio 版本是什么? @HarshithaVeeramalla-MT:问得好。我应该把它包括在我的问题中。这是使用今天发布的 Visual Studio 2022。Web 应用程序在本地运行,没有任何问题。主要问题似乎是它没有识别 Azure App Service 上的 .NET 6 运行时。 @HarshithaVeeramalla-MT:仅供参考:这似乎只是一个沟通不畅的推出,并且从今天开始可用(与 .NET Conf 2021 对应的“官方”发布),但不是昨天还可用(与 GitHub 版本一起)。现在一切都完全按照沟通的方式工作。 See my answer below. 【参考方案1】:好消息。这似乎是the Azure App Service team's "day 0" announcement 和实际可用性之间的暂时滞后。在这篇文章中,.NET 6 运行时现在至少可以在美国中南部地区通过抢先体验获得,而且可能还包括其他地区(未经证实)。最坏的情况,基于the ASP.NET Core 6 announcement,这应该在本周末全球可用。
迁移步骤
重申原帖,要迁移,您需要执行以下步骤:
项目:从例如ASP.NET 5 to ASP.NET 6 迁移您的应用;值得注意的是,在项目文件 (csproj
) 中:
更新<TargetFramework />
以定位net6.0
将所有 Microsoft.AspNetCore.*
NuGet 包更新到 6.0.0
发布配置文件 (pubxml
):更新<TargetFramework />
以定位net6.0
Azure 应用服务配置:将 .NET 版本更新为“.NET 6(抢先体验)”
其他信息
您不应该需要执行以下任何操作:
重新启动您的 Azure 应用服务 使用Self-contained
部署模式发布您的网络应用程序
通过 Azure App Service Extensions 安装 .NET 运行时
配置AspNetCoreModule
(V2
)(ASP.NET Core 3 需要)
解决方法
如果您所在的地区尚不提供抢先体验,并且您不想等到本周末,那么您可以使用两种解决方法,如本主题其他地方所建议的那样:
Install the .NET 6 runtime via an App Service Extension(根据 Jason Pan 的回答) Deploy using a self-contained ASP.NET Core 6 web app(根据 Eric Imhauser 的回答)总而言之,微软至少可以声称它在“第一天”就可用,并利用索引中的模糊性。
【讨论】:
【参考方案2】:我在使用 Azure DevOps 进行部署时遇到了这个问题,我完全糊涂了。因此,我发布此内容是为了帮助遇到同样问题的任何人升级到 .NET 6 并使用 Azure DevOps 进行部署。
这实际上是一个很小的改变。
在发布的管道中,确保选择的Runtime Stack
是DOTNETCORE 6
(见下图)
【讨论】:
【参考方案3】:您应该将 .NET 版本更改为 .Net 6(Early Access)
。
您还需要在 scm 站点中安装扩展程序,网址如 https://your_app_name.scm.azurewebsites.net
。搜索ASP.NET Core 6.0
,然后安装。
然后你可以重启你的webapp来检查。
【讨论】:
.NET 版本已设置为“.NET 6 (Early Access)”。我会尝试安装运行时扩展作为一种解决方法,但早期访问的整个前提是这不应该是必要的,对吧? 仅供参考:即使不通过 Azure 应用服务扩展安装运行时,它现在似乎也可用,至少在美国中南部地区是这样。其他地区可能还需要几天时间。我已在 a new answer 中发布了此内容,但引用了您的答案作为解决方法,以应对尚不可用的情况。【参考方案4】:我已使用自包含部署模式成功部署到应用服务。 我所做的只是将 csproj 文件中的 TargetFramework 更改为 net6.0,并将 nuget 所有包更新为 6.0.0。
【讨论】:
这是有道理的。我知道以前预览和发布后都需要这样做,但不应该在早期访问中是必需的。最坏的情况,很高兴知道我们可以依靠它。谢谢分享。 仅供参考:看起来即使使用Framework-dependent
部署现在也可以使用,至少在美国中南部地区是这样。其他地区可能还需要几天时间。我有 posted this in a new answer,但引用了您的答案作为解决方法,以应对尚不可用的情况。以上是关于将 ASP.NET Core 6 应用部署到现有的 Azure 应用服务?的主要内容,如果未能解决你的问题,请参考以下文章
将 jQuery 集成到现有的 ASP.NET Web 应用程序中?
如何将 Web API 添加到现有的 ASP.NET MVC (5) Web 应用程序项目中?
Visual Studio 2019 ASP.NET Core API 项目模板损坏?
将捆绑包添加到现有的 ASP.NET Webforms 解决方案