首页 > 解决方案 > 了解 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,该怎么办?当然,我不应该也将我的应用程序更新到最新的补丁版本。

标签: asp.net-core

解决方案


您遇到了这个问题,因为当您引用无版本时,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


推荐阅读