将一个针对新版本.NET的ASP.NET Core应用程序部署到现有的Azure应用服务中?

20

我有一个在ASP.NET Core 3.x上运行的现有Azure应用服务。我将应用程序升级到今天发布的ASP.NET Core 5。在我的本地IIS Express服务器上可以正常工作。但是,当我使用Visual Studio 2019将应用程序发布到应用服务时,我收到以下错误:

HTTP Error 500.31 - ANCM Failed to Find Native Dependencies

此问题的常见解决方案:

找不到指定版本的Microsoft.NetCore.App或Microsoft.AspNetCore.App。

启用了详细错误后,我得到了以下额外信息:

It was not possible to find any compatible framework version 
The framework 'Microsoft.AspNetCore.App', version '5.0.0' was not found.

The following frameworks were found: 
2.1.20 at [D:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App] 
2.1.22 at [D:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App] 
2.2.11 at [D:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App] 
2.2.14 at [D:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App] 
3.0.3 at [D:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App] 
3.1.6 at [D:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App] 
3.1.8 at [D:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.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.AspNetCore.App&framework_version=5.0.0&arch=x86&rid=win10-x86

我曾经理解过ASP.NET Core 5会立即在Azure应用服务上提供。我错过了什么步骤吗?我该如何将ASP.NET Core 5 Web应用程序发布到Azure应用服务?或者我仍然需要等待.NET 5运行时在Azure上可用吗?

注意:最初是关于ASP.NET Core 5的问题,但是这个问题及其答案对于ASP.NET Core 6和ASP.NET Core 7仍然相关。


FYI:我在将Web应用程序升级到ASP.NET Core 6并发布到现有的Azure应用服务时遇到了类似的问题。由于下面的解决方法不起作用,并且错误的具体信息有些不同,因此我已经发布了一个新问题。然而,对于在今天的ASP.NET Core 6发布之后看到这篇文章的任何人,我在此链接到它。 - Jeremy Caney
FYI:这个问题仍然适用于ASP.NET Core 7。 - Jeremy Caney
1个回答

30
从引用的发布说明中并不完全清楚,但为了利用新的App Service早期访问功能公告),你需要显式配置你的App Service以使用.NET 5堆栈。

为.NET 5配置现有App Service

通过Azure门户为现有的App Service完成以下步骤:

  1. 进入您要升级的App Service
  2. 在左侧导航中单击配置
  3. 在页面级别导航中单击常规设置
  4. 堆栈设置下,选择.NET
  5. 框架版本下,选择.NET 5

注意:从技术上讲,一旦这样做,您将安装.NET 5运行时,并且可以切换回例如.NET Core运行时堆栈。然而,这样做会阻止您获得随后的.NET更新的早期访问权限,因此我不建议这样做。

注意: 对于 ASP.NET Core 6,该选项现在标记为“ .NET 6 (LTS)”;对于 ASP.NET Core 7,该选项现在标记为“.NET 7 (STS)”。

为 .NET 5 配置新的 App Service

通过 Azure 门户配置新的 App Service 时,这个选择是 App Service Early Access 更加详细的选项之一。在这种情况下,创建 App Service 时,会提示您选择运行时堆栈(Runtime stack),在其中,.NET 5 会被明确标记为 .NET 5 (Early Access)

注意: 如果您已经在同一个 App Service 计划上配置了另一个使用 App Service Early Access 的 App Service,则 .NET 5 运行时已经安装并可用。这是因为 .NET 运行时是在相同 App Service 计划上的 App Service 之间共享的。

Visual Studio 发布警告

即使使用了 Early Access 功能,如果您启用了版本兼容性检查,从 Visual Studio 2019 16.8 发布时仍然可能收到以下警告:

您的应用程序需要.NET Core 5.0.0运行时,但Microsoft Azure应用服务仅支持以下版本: 2.1.20、2.1.22、2.2.11、2.2.14、3.0.3、3.1.6和3.1.8。

尽管如此,一旦您发布了应用程序,即使您使用“依赖于框架”部署模式,一切也应该正常工作。

应用洞察

需要注意的是:目前应用服务早期访问功能的实现尚未支持应用洞察集成。我在2020年11月创建了一个问题请求状态更新有关应用洞察兼容性的更新,但我不指望很快会有解决方案:一个后续的线程被关闭且没有解决方案。

如果您仍然依赖于应用洞察的Azure集成,我建议您迁移到SDK实现

注意:在ASP.NET Core中配置Application Insights SDK比之前版本的.NET Framework简单得多,需要的样板代码也远少于以前。

替代方案

作为一种替代方案,您可以选择在发布配置文件(*.pubxml)中使用自包含部署模式进行部署。这是之前在Azure应用服务上发布新版.NET Core所需采取的方法,在.NET 5之前仍然得到支持。


1
非常感谢! - Leonard Lewis
一切在.NET Core 3.1上都很好,我升级到了.NET 5,但应用程序服务出现了故障。我一直在尝试找出问题的原因,查看日志和诊断工具。本地一切正常,但应用程序服务会抛出400错误请求(无效的主机名),或返回500.31 ANCM未能找到本机依赖项(未找到指定版本的Microsoft.NetCore.App或Microsoft.AspNetCore.App)。有什么想法吗?这真让人沮丧。 - Nexus
@Nexus:这可能是由于某个依赖项仍然依赖于旧版本的SDK,该版本可能仍然存在于本地或.NET Core配置的应用服务中。如果您还没有这样做,我建议 暂时启用 UseDeveloperExceptionPage() 来确定检测到的 具体 错误。 (该链接 - 这是我的之前的一个答案 - 包含有关在 Azure 上解决500.31错误以及一个简单示例的更多详细信息。) - Jeremy Caney
3
如果有帮助的话,对于现有的应用程序服务,我已经将其更改为.NET/.NET 5,但是随后不得不重新部署我的最新管道发布。 - obaylis
消息通知:自 ASP.NET Core 5.0 发布已有五个月,但 Azure 仍然不支持通过 Early Access 的无代码配置实现 Application Insights。鉴于此,我们建议迁移到 Application Insights SDK,它只需要几行代码用于基本的服务端配置。 - Jeremy Caney
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接