我在 netcoreapp2.0 控制台应用程序中遇到以下 NU1605 依赖项错误:
NU1605 Detected package downgrade: System.Diagnostics.Debug from 4.3.0 to 4.0.11. Reference the package directly from the project to select a different version.
MyProject -> Colorful.Console 1.2.6 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Diagnostics.Debug (>= 4.3.0)
MyProject -> System.Diagnostics.Debug (>= 4.0.11)
NU1605 Detected package downgrade: System.Runtime.Extensions from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version.
MyProject -> Colorful.Console 1.2.6 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Runtime.Extensions (>= 4.3.0)
MyProject -> Colorful.Console 1.2.6 -> System.Runtime.Extensions (>= 4.1.0) MyProject
NU1605 Detected package downgrade: System.Runtime.Handles from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version.
MyProject -> Colorful.Console 1.2.6 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Runtime.Handles (>= 4.3.0)
MyProject -> Colorful.Console 1.2.6 -> System.IO.FileSystem 4.0.1 -> System.Runtime.Handles (>= 4.0.1)
NU1605 Detected package downgrade: System.Runtime.InteropServices from 4.3.0 to 4.1.0. Reference the package directly from the project to select a different version.
MyProject -> Colorful.Console 1.2.6 -> System.Console 4.0.0 -> runtime.win.System.Console 4.3.0 -> System.Runtime.InteropServices (>= 4.3.0)
MyProject -> Colorful.Console 1.2.6 -> System.Runtime.InteropServices (>= 4.1.0)
我曾尝试在 csproj 中引用这些包版本,但这并不能解决问题。参见 csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Colorful.Console" Version="1.2.6" />
<PackageReference Include="CommandLineParser" Version="2.2.1" />
<PackageReference Include="DotSpinners" Version="1.2.0" />
<PackageReference Include="System.Diagnostics.Debug" Version="4.0.11" />
<PackageReference Include="System.Runtime.Extensions" Version="4.1.0" />
<PackageReference Include="System.Runtime.Handles" Version="4.0.1" />
<PackageReference Include="System.Runtime.InteropServices" Version="4.1.0" />
</ItemGroup>
</Project>
他们似乎恢复得很好:
https://i.stack.imgur.com/RhyLG.png
该项目还引用了 Microsoft.NETCore.App 2.0 SDK。
从 CLI 执行 dotnet restore 时,我还收到以下错误,我不确定是否相关:
C:\Program Files\dotnet\sdk\2.1.200\NuGet.targets(114,5): error : Failed to retrieve information about 'System.Runtime.Serialization.Formatters' from remote source 'https://mycompany.pkgs.visualstudio.com/_packaging/myid/nuget/v3/flat2/system.runtime.serialization.formatters/index.json'. [C:\MyProject\MyProject.sln]
C:\Program Files\dotnet\sdk\2.1.200\NuGet.targets(114,5): error : Response status code does not indicate success: 401 (Unauthorized). [C:\MyProject\MyProject.sln]
我不知道它为什么要从我们的私人公司包存储库中检索有关“System.Runtime.Serialization.Formatters”的信息。
NuGet.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="mycompany" value="https://mycompany.pkgs.visualstudio.com/_packaging/Stable/nuget/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<mycompany>
<add key="Username" value="vsts" />
<add key="ClearTextPassword" value="xxx" />
</mycompany>
</packageSourceCredentials>
<disabledPackageSources>
<add key="Microsoft and .NET" value="true" />
</disabledPackageSources>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
<bindingRedirects>
<add key="skip" value="False" />
</bindingRedirects>
<packageManagement>
<add key="format" value="0" />
<add key="disabled" value="False" />
</packageManagement>
</configuration>
如果这意味着什么,我还会收到以下 NU1603 警告:
NU1603 MyProject depends on System.Runtime.Handles (>= 4.1.0) but System.Runtime.Handles 4.1.0 was not found. An approximate best match of System.Runtime.Handles 4.3.0 was resolved.
我对 .netcoreapp2.2 控制台应用程序有类似的问题。
该项目建设成功。但是,发布失败并出现多个 NU1605 错误。
问题源于 log4net 版本 2.0.8。它在具有以下依赖项的 .netstandard2.0 项目中被引用:
https://i.stack.imgur.com/JwQrN.png
他们在引用 log4net 的项目中导致包降级。在发布期间,这些警告被视为错误......
为了解决这个问题,我通过 Nuget 添加了这些库的正确版本。
https://i.stack.imgur.com/U4WI8.png
最后,发布成功。
PS 当我第一次使用最新版本的库添加包时,依赖列表上会显示一个黄色警告标志,就好像这些包不适合该项目一样。卸载项目并重新加载后,警告标志消失了! (我正在使用 Visual Studio 2019)
错误 NU1605 检测到包降级
对于错误 NU1605:
您可以使用 <NoWarn>NU1605</NoWarn>
清除项目中的 WarningsAsErrors
。
那是因为 netcoreapp2.0
项目默认有 <WarningsAsErrors>NU1605</WarningsAsErrors>
。从 Properties->Build->Treat warning as errors 检查它:
https://i.stack.imgur.com/JL8GW.png
添加如下:
<PackageReference Include="Colorful.Console" Version="1.2.6">
<NoWarn>NU1605</NoWarn>
</PackageReference>
在此处查看博文:MSBuild integration of NuGet warnings and errors 和 Unexpected package version warnings。
对于错误 NU1603:
出现警告是因为提要中不存在 System.Runtime.Handles
(>= 4.1.0)。通常这是一个包创作错误,因为包依赖于不存在的东西。
您也可以使用 <NoWarn>NU1603</NoWarn>
来解决此问题:
<PropertyGroup>
<NoWarn>NU1603</NoWarn>
</PropertyGroup>
注意:您会注意到您的项目有另一个警告,请注意 PackageReference DotSpinners
上的黄色三角形标志。那是因为包 DotSpinners
是一个 .NET Framework 项目,与您的 .NET Core 项目不兼容。
.Net core 3.1
和 log4Net
遇到了同样的问题 (NU1605):
错误 NU1605:检测到包降级:System.Net.NameResolution 从 4.3.0 到 4.0.0。
我所做的是添加对 System.Net.NameResolution
的 Nuget 引用并安装版本 4.3.0,然后我关闭 Visual Studio 并重新打开解决方案。
以上所有内容都对我的 .NET Core 3.1 项目没有帮助。
完全重新编译后,错误NU1605再次出现。在 csproj 文件中对版本号的所有引用都是正确的。
最终有帮助的是删除 obj 文件夹!
之后重新编译没有问题。
确保您使用相同的版本进行构建和发布,您可以在 PropertyGroup 下的 .csproj 文件中添加 2.1.9 来修复它,这应该与您当前的设置版本匹配。前任:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeFrameworkVersion>2.1.9</RuntimeFrameworkVersion>
</PropertyGroup>
我得到的错误是:NETSDK1061: 该项目是使用 Microsoft.NETCore.App 版本 2.1.9 恢复的,但在当前设置下,将使用 2.1.0 版本。
我遇到的导致此错误的原因是在一个或多个 .csproj 文件中对同一个包有多个引用。在我们的例子中,这些引用指向我们自己的 nuget 存储库中的本地依赖项。
这对 Visual Studio 中的开发人员是不可见的,因此您需要在单独的编辑器中打开 .csproj 文件。
对于我的团队,我认为原因是依赖库和消耗该依赖项的解决方案中的大量流失的组合。无论出于何种原因,git merge 都会在 .csproj 文件中同时采用这两个版本,而不会引发冲突。在几个项目文件中,我发现了相同依赖项的 3 个版本。
这个问题已经有很多答案,其中很多都解决了这个问题,但我认为我应用的解决方案比我在网上看到的所有其他解决方案都要干净。
如前所述,.Net Core 3.1 中错误的常见嫌疑人是某些程序集,具体取决于需要 System.*
或 Microsoft.*
程序集的库。
当构建运行时,一切都会好起来的,因为程序集的解析只使用项目引用。当执行“发布”构建并选择运行时时,程序集的解析不遵循 Nuget 在还原时使用的算法,因此警告会出现。
在这种情况下,遵循我的解决方案:当我们使用目标运行时执行构建时,我们希望强制选择正确的运行时版本。
在 .csproj 文件中,我添加了以下内容:
<!-- adjust runtime and package version accordingly -->
<ItemGroup Condition="'$(RuntimeIdentifier)' == 'win-x64' ">
<PackageReference Include="Microsoft.NETCore.Targets" Version="3.1.0" />
</ItemGroup>
位于 this link 的 Microsoft.NETCore.Targets
包(其中包含有关警告的大量信息)是可怕警告的解决方案之一,并且仅将其包含在发布构建中可以使所有其他构建保持不变。这个包的好处是它是 one 包,并且包含所有运行时。
我在同一个解决方案中使用 .Net Standard 2.0 DLL 的 .Net Core 2.2 项目遇到了这个问题。当我将几个 SeriLog 包添加到 .Net Core 应用程序时,我报告了 .Net Standard DLL 的错误。我取消了更改,然后一个接一个地添加了 SeriLog 包,在每次添加之间进行清理和重建。这次没有错误...
我不确定这是否是解决此问题的最佳选择或方法,但我遇到了同样的问题:
NuGet 警告 NU1605(包降级)
我的消除过程是确保我的项目是: 1. 保存 2. 构建解决方案(ctrl shift b)(唯一的错误是 NU1605) 3. 右键单击项目文件夹,单击进入管理 NuGet 包。 4.点击Updates,我亲自更新了所有包。 5.(再次第 2 步)。
这就是我需要做的。希望这是同样的结果。
我引用的 GraphQL nuGet 包依赖于 Newtonsoft.Json(>= 10.0.3)
。唯一的解决方案如下:
删除 GraphQL nuGet 包。
安装最新的 NewtonSoft.Json 包 v12.0.3
返回并重新安装 GraphQL nuGet 包。
为什么 dotnet restore
仅在 RuntimeIdentifier:win10-x64
上带来依赖性警告。 portable
运行时正常工作。
我在发布时遇到了类似的问题 (NU1605),但我发现是运行时 linux-x64
。所以我删除了运行时选项,问题就消失了。
我有一个类似的问题,我的项目有这样的包引用:
包参考:
套餐A
套餐 B 套餐 A
套餐A
所以因为项目 B 引用了包 A,所以我只是从主包列表中删除了包 A,剩下的包 B 引用了包 A。我重建了解决方案,问题就消失了。
在将连接服务引用添加到 ASP.Net Webservice 时,我遇到了这个问题。在项目 Nop.Plugin.SDE 中添加了此引用,导致添加对 System.ServiceModel.Http 4.4.4 的引用,而它已经在引用具有对 System.ServiceModel.Http 4.7.0 的引用的项目 Nop.Services。解决方案是将 System.ServiceModel.Http 的引用从项目 Nop.Plugin.SDE 升级到版本 4.7.0。
https://i.stack.imgur.com/luQR9.jpg
https://i.stack.imgur.com/SbXRI.jpg
https://i.stack.imgur.com/JYTMb.jpg
在完成上述所有建议并参考@Mert 接受的答案后,对我有用的是删除导致不一致的特定包。
https://i.stack.imgur.com/OuadW.png
在包文件夹内,Visual Studio 非常有帮助地用黄色警告标志标记导致问题的包。
我删除了包并使用 NuGet 安装了相应版本的包。
我在尝试更新 Nuget 包时遇到了 .NET 5 的 NU1605。
this 文章中示例 2 的解决方案非常适合我。
简而言之,我只需要添加
<PackageReference Include="Microsoft.NETCore.Targets" Version="5.0.0" PrivateAssets="all" />
到项目的ItemGroup,它是更新的目标(在VS中,当我双击“检测到的包降级”错误消息时出现了相关的.csproj)。
可能有人添加了新版本的新项目,也可能有一些旧版本的项目。将所有项目升级到相同版本将解决此问题。