【问题标题】:Detected package downgrade: Microsoft.EntityFrameworkCore.SqlServer from 2.2.6 to 2.2.4检测到包降级:Microsoft.EntityFrameworkCore.SqlServer 从 2.2.6 到 2.2.4
【发布时间】:2019-12-01 18:03:36
【问题描述】:

我有一个 ASP.NET Core Web API 应用程序,我被指示更新 NuGet 包,一旦我开始升级,NuGet 开始抛出有关缺少依赖项的错误,在一个接一个之后(一个依赖于其他未安装的并且一个依赖于另一个未安装的2个,所以它去了);我遇到了以下错误:

检测到包降级:Microsoft.EntityFrameworkCore.SqlServer 从 2.2.6 到 2.2.4。直接从项目中引用包来选择不同的版本。

在该错误下方,我看到“安装对 Microsoft.EntityFrameworkCore.Abstractions 2.2.6 的引用以解决问题”

但是当我尝试这样做时,它会抛出:

“检测到版本冲突,安装对 Microsoft.EntityFrameworkCore 2.2.6 的引用以解决此问题”

当然这是一个循环错误,没有给我选项,我尝试安装 2.2.4 版本并抛出相同的冲突错误(但与 2.2.3 版本等有关)。

这是 Visual Studio Enterprise 2017,ASP.NET Core 2.1

我已经尝试添加 true 到 .cproj 文件,根本不工作

【问题讨论】:

    标签: visual-studio-2017 nuget-package asp.net-core-2.1


    【解决方案1】:

    我认为你在这里掉进了一个兔子洞。一般来说,这个例外只是意味着您的项目正在获得同一个包的两个引用,其中一个引用是一个较小的版本。发生这种情况的原因有很多,但通常归结为两种可能性(或两者的组合):

    1. 您有不同的元包引用同一个包,并且元包版本不匹配。

    2. 您有一个或多个项目依赖项,并且这些依赖项使用相同包/元包的不同版本。

    关于“安装对 Microsoft.EntityFrameworkCore.Abstractions 的引用”的内容通常是红鲱鱼。它指出了特定的包参考版本不匹配,但这并不意味着从字面上安装该包是最好的方法。

    最重要的是元包,因为它们基本上只是将多个包整合到一个参考中。实际的底层包及其版本没有被直接引用,但它们就在那里,就像您直接添加了引用一样。因此,并不总是很清楚两个单独的元包实际上在后台使用了一个或多个相同的包。

    此时最好的办法是回滚您的包引用更改。你可能引入的问题比你解决的要多。删除任何无关的或多余的引用。例如,如果您同时引用了 Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.Abstractions,请删除 Abtractions。最简单的方法是直接编辑 .csproj 文件。在您的解决方案中逐个项目地进行项目,并将包缩减为仅对您的项目绝对必要的那些。提示:如果您开始在代码中看到红色波浪线,那么您实际上需要那个。

    完成此操作后,立即升级整个解决方案的所有 NuGet 包。从字面上看,右键单击解决方案并选择“管理解决方案的 NuGet 包”。您还应该检查“合并”选项卡并确保那里没有任何内容,即您在所有项目中运行相同版本的所有内容。那么,你应该很高兴了。

    【讨论】:

    • 谢谢你,克里斯,我终于找到了问题所在,应用程序是为 ASP.NET Core 2.1 构建的,而我安装的组件是为 ASP.NET Core 2.2 设计的(至少),我认为这是 Nuget 包管理器的问题,因为一旦我运行 update-packages 命令,问题就开始了,应用程序停止编译,我最好的猜测(因为我被指示更新包)是一一解决问题直到我被困在这个兔子洞里。我更新到 .NET Core 2.2 并运行 update-packages 并且它工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    相关资源
    最近更新 更多