【问题标题】:Error NU1605 Detected package downgrade错误 NU1605 检测到包降级
【发布时间】:2018-10-21 13:20:57
【问题描述】:

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

而且它们似乎恢复得很好:

该项目还引用了 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.

【问题讨论】:

  • 这个问题有什么更新吗?你解决了这个问题吗?如果没有,请告诉我有关此问题的最新信息吗?
  • 如果您遇到此问题,可能是在不同的包上,可能是因为您引用了一个引用相同包但版本不同的库。尝试在引用项目中通过 Nuget Manager 更新包。
  • 虽然这是一个相当老的问题,但我在 .NET 5.0 中遇到了 System.IO.FileSystem.Primitives 和 System.Runtime.Handles 的类似问题。两人都指出我有一个过时的版本,比如 4.0.1,并告诉我将它升级到 4.3.0。我刚刚在 nuget 中使用正确的版本安装了这些库,所以: System.IO.FileSystem.Primitives -> 4.3.0 System.Runtime.Handles -> 4.3.0 它有效,错误不再存在。希望我可以帮助将来遇到此问题的人。

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


【解决方案1】:

错误 NU1605 检测到包降级

对于错误NU1605

您可以使用&lt;NoWarn&gt;NU1605&lt;/NoWarn&gt; 清除项目中的WarningsAsErrors

那是因为netcoreapp2.0 项目默认有&lt;WarningsAsErrors&gt;NU1605&lt;/WarningsAsErrors&gt;。从 Properties->Build->Treat warning as errors 检查它:

添加如下:

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

在此处查看博文:MSBuild integration of NuGet warnings and errorsUnexpected package version warnings

对于错误NU1603

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

您也可以使用&lt;NoWarn&gt;NU1603&lt;/NoWarn&gt; 解决此问题:

<PropertyGroup>
      <NoWarn>NU1603</NoWarn>
</PropertyGroup>

注意:您会注意到您的项目还有另一个警告,请注意 PackageReference DotSpinners on Reference 上的黄色三角形标志。那是因为包 DotSpinners 是一个 .NET Framework 项目,与您的 .NET Core 项目不兼容。

【讨论】:

  • 好信息,但实际上并没有解决问题,它只是在构建过程中忽略了问题。发布时,当尝试加载这些 dll 时,您将收到运行时错误。请参阅 Mert 的回答。
  • 似乎很多时候,忽略这些警告,构建和运行会很好。是的,关注并解决核心问题是一种很好的做法。但在这种情况下,这些应该保留为警告而不是错误。也许这会在未来的版本中改变。
  • 我真的,真的不喜欢这个答案。沉默警告永远不应该是一个解决方案。尤其是当有替代品时。
  • 我挣扎了很久,终于从 nugget 添加了最新版本的 dll,然后卸载 -> 重新加载项目,一切正常。谢谢
【解决方案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 版本。

【讨论】:

    【解决方案3】:

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

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

    对于我的团队,我认为原因是依赖库和消耗该依赖项的解决方案中存在大量流失。无论出于何种原因, git merge 都会在 .csproj 文件中同时采用这两个版本,而不会引发冲突。在几个项目文件中,我发现了相同依赖项的 3 个版本。

    【讨论】:

    • 这是任何人的正确答案。我们正在构建 Xamarin 项目。在 VSCode 中打开项目并在子项目的 .csproj 文件中查找具有“PackageReference”元素的项目组,并将它们更新为与默认值相同。我仍在研究为什么 VS 不这样做,但这会让你上路。
    【解决方案4】:

    我在 .netcoreapp2.2 控制台应用程序中遇到了类似问题。

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

    问题源于 log4net 版本 2.0.8。它在具有以下依赖项的 .netstandard2.0 项目中被引用:

    他们在引用 log4net 的项目中导致包降级。在发布期间,这些警告被视为错误...

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

    终于发布成功了。

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

    【讨论】:

    • 我刚刚遇到了这个确切的问题。我有一个要发布的项目,目标是 .Net Core 和 .Net Standard。我认为这个问题只有在我添加 .Net Standard 作为目标框架时才会出现。添加这三个包解决了这个问题。
    • 我遇到了与 log4net 完全相同的问题。你是如何改变它的特定 DLL 依赖的?我的 .NetCore 版本是 3.1.0。
    • 可以在nuget中搜索dll并安装最新版本。
    • 是的,在 .NET Core 3.1 控制台应用程序中,log4net 出现了完全相同的问题。我必须将这些包添加到我的类库以及主可执行项目中。
    • 特别是对于 log4net,添加到解决方案中的 Microsoft.NETCore.Targets 库也修复了它。见stackoverflow.com/questions/47712035/…
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

        NuGet 警告 NU1605(包降级)

        我的淘汰过程是为了确保我的项目是: 1. 保存 2.构建解决方案(ctrl shift b)(唯一的错误是NU1605) 3. 右键单击​​项目文件夹,单击进入管理 NuGet 包。 4.点击更新,我亲自更新了所有的包。 5.(再次执行第 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 并重新打开了解决方案。

          【讨论】:

          • 对我来说,只需重启 Visual Studio。奇数。
          • 这里也一样。但问题现在在最新的 log4net nugetpacakge 中得到解决。所以我把它删除了
          • @IanGibblet 对于每个问题,重启应该是第一个尝试的解决方案:D
          【解决方案9】:

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

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

          最后的帮助是删除 obj 文件夹

          之后重新编译没有问题。

          【讨论】:

            【解决方案10】:

            我有一个类似的问题,我的项目有这样的包引用:

            包参考:

            • A 包
            • 包 B
              • A 包

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

            【讨论】:

              【解决方案11】:

              这个问题已经有很多答案了,其中很多都解决了问题,但我认为我应用的解决方案比我在网上看到的所有其他解决方案都干净。

              如上所述,.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>
              

              Microsoft.NETCore.Targets 包,位于 this link(其中包含大量有关警告的信息)是可怕警告的解决方案之一,并且仅将其包含在发布构建中可以保持所有其他构建不变。这个包的好处是它是一个包,并且包含了所有的运行时。

              【讨论】:

              • 这对我不起作用..这个问题太烦人了
              【解决方案12】:

              我在向 ASP.Net Web 服务添加连接服务引用时遇到了这个问题。在项目 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 版。

              【讨论】:

                【解决方案13】:

                我引用的 GraphQL nuGet 包依赖于 Newtonsoft.Json(&gt;= 10.0.3)。唯一的解决方案如下:

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

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

                    在完成上述所有建议并参考@Mert 接受的答案后,对我有用的是删除导致不一致的特定包

                    在包文件夹中,Visual Studio 非常有用地将导致问题的包标记为黄色警告标志。

                    我删除了包并使用 NuGet 安装了相应版本的包。

                    【讨论】:

                      【解决方案16】:

                      我在尝试更新 Nuget 包时遇到了 .NET 5 的 NU1605。

                      this 文章中示例 2 的解决方案非常适合我。

                      简而言之,我只需要添加

                      <PackageReference Include="Microsoft.NETCore.Targets" Version="5.0.0" PrivateAssets="all" />
                      

                      到项目的ItemGroup,它是更新的目标(在VS中,当我双击“Detected package downgrade”错误消息时出现了相关的.csproj)。

                      【讨论】:

                        猜你喜欢
                        • 2021-03-18
                        • 1970-01-01
                        • 1970-01-01
                        • 2020-04-17
                        • 1970-01-01
                        • 2019-12-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多