我有一个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文件,根本不起作用
答案 0 :(得分:0)
我认为您在这里掉了一个兔子洞。通常,该例外仅表示您的项目正在为同一个程序包获取两个引用,而这些引用之一是针对较低版本的引用。发生这种情况可能有多种原因,但通常归结为两种可能性(或两种可能性的结合):
您有引用相同包的不同元包,并且元包版本不匹配。
您有一个或多个项目依赖项,并且那些依赖项目使用同一软件包/元软件包的不同版本。
有关“安装对Microsoft.EntityFrameworkCore.Abstractions的引用”的内容通常是红色鲱鱼。它指出特定的软件包参考版本不匹配,但这并不意味着从字面上安装该软件包是最佳方法。
最大的事情将是元包,因为它们基本上只是将多个包集成到一个引用中。实际的基础软件包及其版本没有直接引用,但它们在那里,就像您直接添加了引用一样。因此,并非总是很清楚两个独立的元软件包实际上是在后台使用一个或多个相同的软件包。
此时最好的方法是回滚软件包参考更改。您可能引入了比解决的问题更多的问题。删除任何多余或多余的引用。例如,如果您同时引用了Microsoft.EntityFrameworkCore
和Microsoft.EntityFrameworkCore.Abstractions
,请删除Abtractions
。直接编辑.csproj文件是最简单的方法。在您的解决方案中逐个项目进行下去,然后将软件包缩减为仅对项目绝对必要的软件包。提示:如果您开始在代码中看到红色的弯曲,实际上就需要那个。
完成此操作后,请一次升级整个解决方案的所有NuGet软件包。从字面上看,右键单击解决方案,然后选择“管理解决方案的NuGet软件包”。您还应该检查“合并”标签,并确保其中没有任何内容,即您在所有项目中都运行相同版本的所有内容。然后,你应该走了。