在打开一个现有的解决方案时,我遇到了一种情况,错误代替了警告。
我打开了YourAwesomeApp.csproj文件,并逐个检查“检测到包降级”错误,手动将该行项目的版本从现有版本更改为错误中显示的指定版本。
例如,如果错误提示检测到“SqlServer 1.0.4 -> 1.0.3”,则找到Sql Server软件包的行并将版本从1.0.3更改为1.0.4。
构建项目后,这些错误应该会消失。
不过,这种方法存在缺点:这一次我只有5个错误,但是如果另一个人的项目中有50个这样的错误,那么手动编辑这些行将会非常乏味和耗时。
dotnet restore
后,这对我有效。 - Aage通常情况下,这是因为您尝试安装的项目需要比您已经包含在项目中的子依赖项更高版本的依赖项。
解决方案是在安装软件包之前更新或删除项目中现有的依赖项。
示例:
检测到软件包降级:从9.0.0降级为8.0.0的Newtonsoft.Json。
这意味着您的项目中已经列出了Newtonsoft.Json 8.0.0作为一个依赖项,但您正在尝试安装的软件包至少需要版本9.0.0作为依赖项。
原因是Visual Studio不会自动升级此依赖项,因为您为项目指定了一个明确的版本。您可以将项目中的依赖项升级到最低要求的版本,也可以将其从项目中删除,并让您正在安装的软件包处理它。
要解决此问题,在上面的示例中,这意味着找到“Newtonsoft.Json 8.0.0”并将其升级到“9.0.0”版本,或者在安装软件包之前将其从项目中删除。
Web应用程序项目:
<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>
Lib项目:
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
我能够通过在 cproj 中添加 NoWarn 来解决一些类似的错误
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<NoWarn>$(NoWarn);NU1605</NoWarn>
</PropertyGroup>
...
</Project>
在多个软件包升级期间,您可能只想暂时添加它,然后稍后再将其删除。
我通过从 csproj
文件中删除 <NetStandardImplicitPackageVersion>
元素来消除项目中的这些警告。
关于隐式元包的一些信息,请参考 这篇文章,它似乎是这个问题的根本原因。
你可能还需要更新一些依赖项。例如,我不得不将 BenchmarkDotNet
从 0.10.1
升级到 0.10.3
,以消除一些类似于你看到的警告。
尝试移除以下内容:
<IsPackable>false</IsPackable>
从您的项目文件中获取-这是我成功的方法!
如果您仍然遇到 NU1605
错误代码,可以通过将以下内容添加到您的项目文件来忽略它:
<PropertyGroup>
<NoWarn>NU1605</NoWarn>
</PropertyGroup>
复制路径并检查。在我的情况下, 项目正在引用4.6.0,但我即将安装的程序集需要5.0.0版本的 System.Diagonistics.DiagonsticSource作为最低要求
我遇到了以下问题:
错误 NU1605:检测到软件包降级:System.Net.NameResolution 从4.3.0降级到4.0.0。直接从项目中引用软件包以选择不同的版本。
所以我通过运行以下命令(在项目文件夹中)来引用软件包目录:
dotnet add package System.Net.NameResolution
问题:
一个依赖包指定了一个更高版本的包的版本约束,而还原最终解析的版本低于其限制。也就是说,在解析包时,“最近者获胜”的规则可能会导致图中较近的包覆盖了远处的包。
解决方法:
为您想要使用的较高版本的包添加项目的直接引用。
检测到包降级:从2.0.3降级为2.0.2的NETStandard.Library。从项目中直接引用该包以选择不同的版本
。