错误NU1605检测到包降级

时间:2018-05-11 07:16:46

标签: .net visual-studio-2017 .net-core nuget .net-core-2.0

我在 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>

他们似乎恢复得很好:

Package References

该项目还引用了 Microsoft.NETCore.App 2.0 SDK。

从CLI执行dotnet还原时,我也收到以下错误,我不确定是否相关:

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&#39;的信息。来自我们的私人公司包存储库。

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.

14 个答案:

答案 0 :(得分:12)

  

错误NU1605检测到包降级

错误 NU1605

您可以使用<NoWarn>NU1605</NoWarn>清除项目中的WarningsAsErrors

这是因为netcoreapp2.0项目默认为<WarningsAsErrors>NU1605</WarningsAsErrors>。从Properties-&gt; Build-&gt;将警告视为错误:

进行检查

enter image description here

添加如下内容:

<PackageReference Include="Colorful.Console" Version="1.2.6">
      <NoWarn>NU1605</NoWarn>
</PackageReference>

点击此处的博文:MSBuild integration of NuGet warnings and errorsUnexpected package version warnings

错误 NU1603

出现警告是因为Feed中不存在System.Runtime.Handles(&gt; = 4.1.0 )。通常这是一个包创作错误,因为包依赖于不存在的东西。

您还可以使用<NoWarn>NU1603</NoWarn>来解决此问题:

<PackageReference>
      <NoWarn>NU1603</NoWarn>
</PackageReference>

注意:您会注意到您的项目有另一个警告,请注意参考上的PackageReference DotSpinners上的黄色三角形徽章。这是因为包DotSpinners是一个.NET Framework项目,与您的.NET Core项目不兼容。

希望这有帮助。

答案 1 :(得分:9)

.netcoreapp2.2控制台应用程序存在类似问题。

项目正在成功构建。但是,发布失败并出现几个NU1605错误。

该问题源自log4net 2.0.8版。在.netstandard2.0项目中引用了它,它具有以下依赖关系:

log4net v2.0.8 does not include specific dependency for .NetStandard,Version=2.0

它们导致引用log4net的项目中的软件包降级。在发布过程中,这些警告被视为错误...

为解决该问题,我通过Nuget添加了这些库的正确版本。

log4net dependencies and additional nuget packages for version errors

最后,发布成功。

P.S。。当我第一次添加具有最新版本库的软件包时,依赖项列表上会显示一个黄色警告标志,好像这些软件包不适合该项目。卸载项目并重新加载后,警告标志消失了! (我正在使用Visual Studio 2019)

希望有帮助!

答案 2 :(得分:8)

.Net core 3.1log4Net遇到了同样的问题(NU1605):

错误NU1605:检测到程序包降级:System.Net.NameResolution从4.3.0降到4.0.0。

我所做的是添加对System.Net.NameResolution的Nuget引用并安装版本4.3.0,然后我关闭了Visual Studio并重新打开了解决方案。

答案 3 :(得分:3)

以上所有对我的.NET Core 3.1项目都没有帮助。

完全重新编译后,错误NU1605再次出现。 csproj文件中所有对版本号的引用均正确。

最终有用的是删除obj文件夹

此后,重新编译工作正常。

答案 4 :(得分:2)

确保您使用相同的版本进行构建和发布 您可以添加2.1.9修复它 在PropertyGroup下的.csproj文件中,这应与您当前的设置版本匹配。 例如:

  <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>netcoreapp2.1</TargetFramework>    
      <RuntimeFrameworkVersion>2.1.9</RuntimeFrameworkVersion> 
  </PropertyGroup>

我得到的错误是: NETSDK1061:使用Microsoft.NETCore.App版本2.1.9还原了项目,但使用当前设置,将改用版本2.1.0。

答案 5 :(得分:1)

在同一个解决方案中使用.Net Standard 2.0 DLL的.Net Core 2.2项目中,我遇到了这个问题。将几个SeriLog程序包添加到.Net Core应用程序时,出现了.Net Standard DLL的错误报告。我撤消了更改,然后一个接一个地添加了SeriLog软件包,并在每次添加之间进行清理和重建。这次没有错误...

答案 6 :(得分:1)

我不确定这是最好的选择还是解决此问题的方法,但是我遇到了同样的问题:

NuGet警告NU1605(程序包降级)

我的淘汰过程是确保我的项目是: 1.已保存 2.构建解决方案(按ctrl移位b)(唯一的错误是NU1605) 3.右键单击项目文件夹,然后单击进入Manage NuGet软件包。 4.单击更新,我将亲自更新所有软件包。 5.(再次执行步骤2)。

这就是我要做的。希望这是相同的结果。

答案 7 :(得分:0)

我遇到的导致此错误的原因是在一个或多个.csproj文件中对同一软件包有多个引用。在我们的例子中,这些引用是针对我们自己的nuget存储库中的本地依赖项。

这对于Visual Studio中的开发人员是不可见的,因此您需要在单独的编辑器中打开.csproj文件。

对于我的团队,我认为原因是在依赖库和消耗该依赖项的解决方案中都发生了很多混乱。无论出于何种原因,git merge都会在.csproj文件中同时使用两个版本,而不会引起冲突。在几个项目文件中,我发现了具有相同依赖项的3个版本。

答案 8 :(得分:0)

发布时我遇到了类似的问题(NU1605),但我发现运行时为linux-x64。所以我删除了运行时选项,问题就消失了。

答案 9 :(得分:0)

我遇到了类似的问题,我的项目中的软件包引用如下:

包装参考:

  • 套餐A
  • 套餐B
    • 套餐A

因此,因为项目B引用了程序包A,所以我只是从主程序包列表中删除了程序包A,而剩下的程序包B引用了程序包A。 我重新构建了解决方案,问题消失了。

答案 10 :(得分:0)

该问题已经有了很多答案,其中许多解决了问题,但是我认为我采用的解决方案比网上看到的其他解决方案都干净。

如前所述,.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 linkMicrosoft.NETCore.Targets程序包(其中包含有关警告的大量信息)是可怕的警告的解决方案之一,并且仅将其包含在publish build中可以使所有其他版本保持不变。该软件包的优点是它是一个软件包,并包含所有运行时。

答案 11 :(得分:0)

将连接服务引用添加到ASP.Net Web服务时遇到了这个问题。在项目Nop.Plugin.SDE中添加了此引用,从而导致添加了对System.ServiceModel.Http 4.4.4的引用,而它已经在引用了对System.ServiceModel.Http 4.7.0进行了引用的项目Nop.Services。解决方案是从项目Nop.Plugin.SDE将对System.ServiceModel.Http的引用升级到版本4.7.0。

Solution explorer after adding reference

Upgrade System.ServiceModel.Http from 4.4.4 to 4.7.0

Reference to System.ServiceMode.Http from Nop.Services

答案 12 :(得分:0)

我所引用的GraphQL nuGet包对Newtonsoft.Json(>= 10.0.3)有依赖性。唯一的解决方法如下:

  • 删除GraphQL nuGet软件包。
  • 安装最新的NewtonSoft.Json软件包v12.0.3
  • 返回并重新安装GraphQL nuGet软件包。

答案 13 :(得分:0)

为什么 dotnet restore 只在 RuntimeIdentifier:win10-x64 上带来依赖警告。 portable 运行时正常工作。