由于 netcore 3.1.4 安全补丁导致 Azure 出错

Error in Azure because of netcore 3.1.4 security patch

我们使用 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 安全补丁?

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

过去,我 运行 遇到过同样的情况,您可以通过手动设置 RunTime Stack 下拉菜单中的值来解决此问题。如果您手动更新构建过程 .yml 文件

 RuntimeStack: 'DOTNETCORE|3.1' 

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

这种方法的主要缺点是构建的确定性会降低:运行您在同一提交上构建两次可能会创建不同的二进制文件,具体取决于构建代理上当前安装的内容。如果您想了解更多,here 是一个有趣的 post 争论为什么确定性构建很重要。

为了保持构建的确定性,您可以使用存储库中的 Use .Net Core task at the beginning of the build (that will make sure that the desired version of the dotnet sdk is on the agent). You could also add a global.json 来锁定开发箱和 Azure Dev Ops 中的构建。

这是一个共同话题 的讨论,您可以找到很多鼓吹这一方或另一方的博客。

Microsoft 发布 LTS net core 3.1 时就开始了激烈的讨论,而且 Azure 也花了一些时间才开始支持 3.1 运行时。

您会发现很多博客强烈建议将您的 Web 应用程序部署为自包含的(运行时大小约为 100MB)并摆脱对支持最新运行时的 Microsoft 的依赖。而其他人则主张应用程序应尽可能保持轻量级,并且应在管道中设置运行时。但这仍然取决于你。在我对 net-core 3.1 的糟糕体验之后,我自己更喜欢部署独立的应用程序。

没有既定的最佳实践。

Or is there a way to force update Azure app service to the new netcore 3.1.4 security patch which would be ideal I think?

AFAIK,没有这种方法可以强制将 Azure 应用服务更新到新的 netcore 3.1.4

我们可以跟踪 https://aspnetcoreon.azurewebsites.net/ 上的最新版本,但目前无法更新。

要解决此问题,我们建议您将应用发布为 self-contained 生成一个应用程序,其中包括 .NET Core 运行时间和库,以及您的应用程序及其依赖项。该应用程序的用户可以 运行 在未安装 .NET Core 运行 的计算机上安装它。

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

您可以查看此文档 .NET Core application publishing overview 了解更多详细信息。

希望这对您有所帮助。