由于netcore 3.1.4安全补丁,Azure中出现错误。

问题描述 投票:0回答:2

我们用Azure DevOps管道来构建我们的web应用,并通过Azure DevOps发布部署到Azure中。我想今天netcore在我们的构建代理上更新到了netcore 3.1.4。但现在我们的 Azure DevOps 部署失败了,因为 netcore 3.1.4 运行时还没有安装到我们 Azure 中的应用服务上。

我们得到的错误信息。

    Could not find 'aspnetcorev2_inprocess.dll'. Exception message:
It was not possible to find any compatible framework version
The framework 'Microsoft.AspNetCore.App', version '3.1.4' was not found.
  - The following frameworks were found:
      2.2.8 at [D:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
      3.0.3 at [D:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
      3.1.1 at [D:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
      3.1.3 at [D:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]

You can resolve the problem by installing the specified framework and/or SDK.

这是有道理的 也是可能发生的 但最好的解决方法是什么?

我可以将我的构建修复为特定的netcore版本。但我不喜欢这样做,因为我们确实希望不断更新到较新的版本,但我们不希望Azure应用服务中的版本不可用。

我的想法是否正确,我们必须自带安装服务,因为否则我们可能会经常遇到这个问题,而Azure DevOps安装补丁的速度比Azure快?

或者有没有一种方法可以强制更新Azure应用服务到新的netcore 3.1.4安全补丁,我想这是最理想的?

我只是需要一些指导,什么是解决这个问题的最佳方法?

azure azure-devops versioning azure-web-app-service .net-core-3.1
2个回答
1
投票

或者是有一个方法来强制更新Azure应用服务到新的netcore 3.1.4安全补丁,这将是理想的,我想?

AFAIK,没有这样的方法来强制更新Azure应用服务到新的netcore的。3.1.4.

我们可以跟踪最新发布的信息。https:/aspnetcoreon.azurewebsites.net。但我们目前无法更新它。

为了解决这个问题,我们建议您将您的应用程序发布为 自足 产生一个应用程序,其中包括.NET Core运行时和库,以及您的应用程序及其依赖性。应用程序的用户可以在没有安装.NET Core运行时的机器上运行它。

将您的应用程序作为独立的应用程序发布,会产生一个平台特定的可执行文件。输出发布文件夹包含应用程序的所有组件,包括.NET Core库和目标运行时。该应用程序与其他.NET Core应用程序隔离,并且不使用本地安装的共享运行时。您的应用程序的用户不需要下载和安装.NET Core。

你可以查看这个文档 .NET Core应用程序发布概述 以了解更多细节。

希望这能帮助你。


1
投票

如果你想让netcore的版本在有更新版本时自动更新,将我们的服务构建为自容器似乎是一个不错的选择:不需要在运行的机器上安装任何东西(即Azure DevOps和Azure Web App上的版本不必匹配)。

这种方法的主要缺点是,构建将减少确定性:运行你的构建两次与在同一提交可能会创建不同的二进制文件,这取决于什么是当前安装在构建代理。此处 是一篇有趣的文章,论证了为什么确定性构建很重要。

为了保持构建的确定性,你可以使用 使用.Net核心任务 (这将确保所需的dotnet sdk版本在代理上)。您也可以在编译时添加一个 global.json 中的版本库,以便为开发箱和 Azure Dev Ops 中的构建锁定。


1
投票

这是一个 共同话题 的讨论,你可以发现很多博客都在鼓吹一方或另一方。

有大讨论开始时 微软发布了LTS net core 3.1 花了一些时间,Azure才开始支持3.1的运行时。

你可以找到很多博客强烈建议将你的web应用部署成自带的(运行时大小约100MB),并对微软支持最新的运行时削减依赖性。而另一些人则主张,应用程序应该尽可能保持轻量级,运行时应该设置在管道中。但这还是要看你自己。我自己在经历了net-core 3.1的糟糕经历后,更倾向于部署自带的应用程序。

没有既定的最佳实践。


0
投票

在过去,我也遇到过同样的情况,你可以通过手动设置RunTime Stack的下拉值来解决这个问题。如果你手动更新构建过程的.yml文件。

 RuntimeStack: 'DOTNETCORE|3.1' 
© www.soinside.com 2019 - 2024. All rights reserved.