asp.net-core - 了解 ASP.NET Core 补丁版本前滚
问题描述
我试图了解 Microsoft.AspNetCore.App 的前滚机制应该如何与其他 nuget 包一起工作。
到目前为止,我的理解是,每当我发布我的应用程序时,.netcore 都会自动在我安装的最新修补版本上发布应用程序。这对我来说听起来不是一个好习惯。我认为应用程序应该部署在开发它的 .net 版本上。
我最近遇到了一个问题,我的构建服务器安装的 SDK 比我的开发机器上的更新,因此它尝试使用更新的 .netcore 版本发布应用程序。
这导致构建中断并出现以下错误:
error NU1605: Detected package downgrade: Microsoft.EntityFrameworkCore.Design from 2.1.8 to 2.1.4. Reference the package directly from the project to select a different version.
我已明确指定我需要 Microsoft.EntityFrameworkCore.Design 的 2.1.4 版本,因为这是我最初开发应用程序时可用的最新版本。
我觉得我在这里遗漏了一些东西。我是否应该确保始终在本地安装与构建服务器相同的 SDK,并且每次需要进行更改时我的所有应用程序都更新到最新的 SDK?如果一位同事想要编写一个针对较新版本框架的 .netcore 应用程序,他们要求在构建服务器上安装一个新的 SDK,该怎么办?当然,我不应该也将我的应用程序更新到最新的补丁版本。
解决方案
您遇到了这个问题,因为当您引用无版本时,Microsoft.AspNetCore.App
您不应该引用已经被元包拉入的包。因为元包已经包含Microsoft.EntityFrameworkCore.Design
并且您指定了硬版本,所以您遇到了版本冲突。
这通常发生在您有一个项目,而另一个项目(例如测试项目)中的元包具有指定版本时。然后发生的情况是,在构建时它将确定最高版本并使用它,但是当它进入测试项目时,它需要降级(因为指定的版本)并会引发构建错误。3.0 之前的推荐方法是添加<Project Sdk="Microsoft.NET.Sdk.Web">
到测试项目并使用元包。
据我所知,它的工作原理是这样的:当您引用Microsoft.AspNetCore.App
它时,它将采用尽可能低的版本。因此,例如,如果您的目标框架是 netcoreapp2.1,那么它将需要 2.1.1。当它构建时,它将查看您安装并使用的共享框架的最高版本。如果您安装了以下运行时:2.2.0、2.1.5、2.1.12,它将前滚到 2.1.12。还有一些与次要版本有关的额外前滚策略(如果它是预览版本或不是等),但只有在找不到与主要版本和次要版本对应的运行时才会发生。
另请参阅:https ://github.com/aspnet/AspNetCore/issues/3292和https://github.com/aspnet/AspNetCore.Docs/issues/6430
推荐阅读
- javascript - 运行特快路线
- tcl - 错误的窗口路径名“.snd”
- java - 将数据加载到java中的下拉列表?
- python - 从 pandas 数据框生成变更日志
- python - Scrapy:如何使用`python将产量输出保存到json中
`? - promise - 如何限定事件处理程序的形式参数以用于 Fragment.load 承诺解析?
- vue.js - 如何删除 Vuetify v-checkbox 中的检查
- python - 根据分类数据绘制日期时间(Y 轴)
- sql - 如何在不聚合的情况下旋转时间序列表
- python - 如何使用 AJAX 在 Django 中显示更改的数据