azure - 将面向新版本 .NET 的 ASP.NET Core 应用部署到现有的 Azure 应用服务?

标签 azure asp.net-core azure-web-app-service .net-5 asp.net-core-5.0

我有一个在 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

Common solutions to this issue:

The specified version of Microsoft.NetCore.App or Microsoft.AspNetCore.App was not found.

detailed errors enabled ,我得到以下附加信息:

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 would be immediately available on Azure App Services 。我是不是少了一步?如何将 ASP.NET Core 5 Web 应用程序发布到 Azure 应用服务?或者我是否仍然需要等到 .NET 5 运行时在 Azure 上可用?

Note: This question was originally asked for ASP.NET Core 5. However, this question—and its answer—remain relevant to ASP.NET Core 6 and ASP.NET Core 7.

最佳答案

the release notes 中尚不完全清楚。引用,但为了利用新的 App Service Early Access feature ( announcement ),您需要显式配置您的应用服务以使用 .NET 5 堆栈。

为 .NET 5 配置现有应用服务

要通过现有应用服务的 Azure 门户执行此操作,请完成以下步骤:

  1. 转到您要升级的应用服务
  2. 点击左侧导航栏中的配置
  3. 点击页面级导航中的常规设置
  4. 堆栈设置下,选择.NET
  5. 框架版本下,选择.NET 5

Note: Technically, once you do this, you'll have the .NET 5 runtime installed and could switch back to e.g. the .NET Core runtime stack. Doing so, however, would prevent you from gaining early access to subsequent updates to .NET, so I wouldn't recommend it.

Note: For ASP.NET Core 6, this option is now labeled ".NET 6 (LTS)". For ASP.NET Core 7, this option is now labeled ".NET 7 (STS)".

为 .NET 5 配置应用服务

通过 Azure 门户配置新的应用服务时,这种对应用服务早期访问的选择要明确得多。在这种情况下,在创建应用服务时,系统会提示您选择运行时堆栈,在该堆栈下 .NET 5 被明确标记为.NET 5(早期访问)>.

Note: If you already have another App Service configured to use App Service Early Access on the same App Service Plan, then the .NET 5 runtime will already be installed and available. This is because .NET runtimes are shared between App Services on the same App Service Plan.

Note: For ASP.NET Core 6, this option is now labeled ".NET 6 (LTS)". For ASP.NET Core 7, this option is now labeled ".NET 7 (STS)".

Visual Studio 发布警告

即使使用抢先体验功能,假设您启用了版本兼容性检查,从 Visual Studio 2019 16.8 发布时您仍然可能会收到以下警告:

Your application requires the .NET Core 5.0.0 runtime, but Microsoft Azure App Service only supports the following versions: 2.1.20, 2.1.22, 2.2.11, 2.2.14, 3.0.3, 3.1.6, and 3.1.8.

尽管如此,一旦发布,一切都应该可以正常工作,即使您使用的是依赖于框架的部署模式。

应用洞察

警告一句:the App Services Early Access feature doesn't yet support Application Insights integration 的当前实现。我创建了一个issue requesting status updates regarding Application Insights compatibility早在 2020 年 11 月,但我预计不会很快得到解决方案:a follow-up thread未解决就关闭。

如果您仍然依赖 Application Insights 的 Azure 集成,我建议您migrate to the SDK implementation .

Note: Configuring the Application Insights SDK in ASP.NET Core is dramatically simpler than it was in earlier versions of .NET Framework, and requires far less boilerplate code.

替代方案

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

关于azure - 将面向新版本 .NET 的 ASP.NET Core 应用部署到现有的 Azure 应用服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64777919/

相关文章:

php - Azure 网站中的 PDO 语句与应用程序内的 MySQL

azure - Azure 网站支持的最大域数

c# - 在服务之间共享 HttpClient

css - 从 Azure CDN 请求的字体文件被 CORS 策略阻止

reactjs - 我是否需要 Azure AD 应用程序才能将 Power BI 报告嵌入到我自己的应用程序中?

Azure Purview - 扫描文件类型

c# - Asp.net Core 中 IFormFile 字段的 xunit 测试

asp.net - Angular 2 - ASP.NET MVC 应用程序 - 无 SPA

azure-web-app-service - 将 Azure AD 授权 token 从容器 Web 应用程序传递到嵌入式 (iFrame) 应用程序中

c# - Microsoft.Azure.Cosmos.Container.ReadItemAsync() 失败 - json 解析 - 意外字符