由于网络核心 3.1.4 安全修补程序,Azure 中的错误



我们使用 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 FilesdotnetsharedMicrosoft.AspNetCore.App]
3.0.3 at [D:Program FilesdotnetsharedMicrosoft.AspNetCore.App]
3.1.1 at [D:Program FilesdotnetsharedMicrosoft.AspNetCore.App]
3.1.3 at [D:Program FilesdotnetsharedMicrosoft.AspNetCore.App]
You can resolve the problem by installing the specified framework and/or SDK.

这是有道理的,可能会发生,但是解决此问题的最佳方法是什么?

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

我是否正确认为我们必须自包含地安装我们的服务,因为否则当 Azure DevOps 安装补丁的速度比 Azure 更快时,我们可能会更频繁地遇到这个问题?

或者有没有办法强制将 Azure 应用程序服务更新到我认为理想的新 netcore 3.1.4 安全补丁?

我只需要一些关于解决此问题的最佳方法的指导?

或者有没有办法强制将 Azure 应用程序服务更新到我认为理想的新 netcore 3.1.4 安全补丁?

AFAIK,没有这样的方法可以强制将 Azure 应用服务更新到新的网络核心3.1.4

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

若要解决此问题,建议将应用发布为自包含生成应用程序,其中包括 .NET Core 运行时和库,以及应用程序及其依赖项。应用程序用户可以在未安装 .NET Core 运行时的计算机上运行它。

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

您可以查看此文档 .NET Core 应用程序发布概述以获取更多详细信息。

希望这有帮助。

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

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

若要保持生成的确定性,可以在生成开始时使用"使用 .Net Core"任务(这将确保代理上存在所需版本的 dotnet sdk(。还可以在存储库中添加 global.json,以锁定开发盒和 Azure 开发人员操作中的生成。

这是一个常见的讨论话题,你可以找到很多主张一方或另一方的博客。

当Microsoft发布 LTS 净核心3.1 时,开始了很大的讨论,Azure 也开始支持 3.1 运行时需要一段时间。

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

没有既定的最佳实践。

过去,我遇到过同样的情况,您可以通过手动设置运行时堆栈下拉列表中的值来解决此问题。如果手动更新生成过程 .yml 文件

RuntimeStack: 'DOTNETCORE|3.1' 

最新更新