【问题标题】:Detected package downgrade warning (dotnet core, vs 2017)检测到包降级警告(dotnet core,vs 2017)
【发布时间】:2017-03-10 03:15:32
【问题描述】:

我刚刚为我的解决方案(dotnet core 1.1 项目)更新了所有 nuget 包。

我现在收到以下警告,但我真的不知道它们是什么意思。


更新:我仍然收到上述警告。我的 web 项目警告 Microsoft.NETCore.App 包(见下面的截图),我的 lib 项目警告 NETStandard.Library(见上面的截图)

尝试在 NuGet 包管理器中更新 Microsoft.NETCore.App 时,我收到以下错误:

希望有人可以帮助我摆脱这些警告并设置应有的一切,以便我可以更新我的所有软件包。

【问题讨论】:

  • 你能发布你的 .csproj 文件的内容吗?

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


【解决方案1】:

我在打开现有解决方案后出现这种情况,但不是警告,而是错误。

我打开了 YourAwesomeApp.csproj 文件并逐一检查了“检测到的包降级”错误,并手动将该行项目的版本从现有版本更改为错误本身显示的指定版本。

例如,如果错误显示降级检测到“SqlServer 1.0.4 -> 1.0.3”,则找到包 SqlServer 的行并将版本从 1.0.3 编辑为 1.0.4。

构建项目后,这些错误应该会消失。

这样做的缺点是我这次只有 5 个错误,但如果另一个人的项目包含 50 个这样的错误怎么办。那么这个人手动编辑这些行的任务将非常乏味和耗时。

【讨论】:

  • 这对我有用,之后我在未能构建项目时做了dotnet restore
  • 为我工作但必须做一个“干净的解决方案”然后构建。
  • 检测到的包降级:Microsoft.Extensions.Logging 从 3.1.3 到 2.2.0。直接从项目中引用包以选择不同的版本。当我搜索 Microsoft.Extensions.Logging 时,我没有找到任何内容。
【解决方案2】:

这通常是因为您尝试安装的项目需要比您已包含在项目中的子依赖项更新的版本。

解决方案是在安装包之前更新或删除项目中的现有依赖项。

示例:

检测到包降级:Newtonsoft.Json 从 9.0.0 到 8.0.0。

这意味着您的项目中已将 Newtonsoft.Json 8.0.0 列为依赖项,但您尝试安装的软件包至少需要 9.0.0 版本作为依赖项。

这是因为 Visual Studio 不会自动升级此依赖项,因为您已为项目指定了显式版本。您可以将项目中的依赖项升级到所需的最低版本,也可以将其从项目中删除,然后让您正在安装的包处理它。

要解决此问题,在我们上面的示例中,这意味着找到“Newtonsoft.Json 8.0.0”并将其升级到版本“9.0.0”,或者在之前将其从您的项目中删除安装你的包。

【讨论】:

    【解决方案3】:

    根据上面的答案,工作解决方案是从您的 csproj 文件中删除以下行。

    网络应用项目:

    <RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>
    

    Lib 项目:

    <NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
    

    【讨论】:

      【解决方案4】:

      在我的情况下,这些属性都没有在我的 csproj 文件中设置。

      我不得不告诉 VS 通过 NuGet 更新这些包。

      在从 1.0 迁移到 1.1 后解决显式引用隐式依赖项 .NETCore.App 的警告后,出现警告。

      21/09/17 更新

      这似乎也影响升级到2.0,分辨率是一样的。使用 NuGet 手动更新这些包。感谢 IbrarMumtaz 指出这一点!

      【讨论】:

      • 现在从 1.1 > 2.0 开始发生在我身上。 : ?
      • 明确设置你的包版本几乎绝对​​是最好的,而不是忽略警告或尝试其他更通用的解决方案。如果您想避免降级,请明确说明。这是最好的答案。
      • 除非 nuget 不会让你!噩梦。
      【解决方案5】:

      我能够修复一些错误,比如在 cproj 中添加 NoWarn

      <Project Sdk="Microsoft.NET.Sdk">
      
       <PropertyGroup>
          <NoWarn>$(NoWarn);NU1605</NoWarn>
        </PropertyGroup>
      
      ...
      </Project>
      

      您可能只想在多个软件包升级期间临时添加它,然后再将其删除。

      【讨论】:

      • 唯一的问题是“暂时”不可避免地变成了永久。进行更改的人要么忘记将其更改回来,要么没有记录下来,并且维护工作会被传递给其他人,而这些人一开始就不知道临时修复。或者他们从来没有时间处理它,它最终消失在时间的迷雾中,一成不变。
      【解决方案6】:

      通过从csproj 文件中删除&lt;NetStandardImplicitPackageVersion&gt; 元素,我能够在我的项目中消除这些警告。

      有一些关于隐式元包的信息in this article,这似乎是这个问题的根本原因。

      您可能还需要更新一些依赖项。例如,我必须将 BenchmarkDotNet0.10.1 升级到 0.10.3 以消除一些警告,就像您看到的那样。

      【讨论】:

        【解决方案7】:

        尝试删除

        <IsPackable>false</IsPackable>
        

        来自您的项目文件 - 这对我有用!

        如果您仍然留下NU1605 错误代码,您可以通过将以下内容添加到项目文件中来忽略它:

        <PropertyGroup>
            <NoWarn>NU1605</NoWarn>
        </PropertyGroup>
        

        【讨论】:

        • 我做了 nowarn 解决方案,以便能够将最新的 3.1.0-preview4.19579.2 发布到 azure webapp。
        • 是的,只要您可以在构建中忽略此特定警告即可:)
        【解决方案8】:

        尝试使用 NuGet

        我得到了:

        错误 NU1605:检测到包降级:System.Net.NameResolution 从 4.3.0 到 4.0.0。直接从项目中引用包来选择不同的版本。

        所以我通过运行(在项目文件夹中)引用了包目录:

        dotnet add package System.Net.NameResolution
        

        NuGet Errors - NU1605

        问题:

        依赖包指定了对更高版本的包的版本约束,而不是最终解决的恢复。也就是说,由于解析包时的“最近获胜”规则,图中较近的包可能会覆盖较远的包。

        解决方案:

        为要使用的更高版本的包添加对项目的直接引用。

        【讨论】:

          【解决方案9】:

          就我而言,此错误与 .NET Core 无关,而是与 .NET Standard 相关。

          我有两个库 A 和 B。库 A 依赖于某个 nuget 包 X,而库 B 依赖于 A。一旦我将 X 升级到新版本,不知何故它开始依赖于 NETStandard.Library nuget package 的新版本(从 2.0.2 到 2.0.3),它破坏了 B 的构建,错误为 Detected package downgrade: NETStandard.Library from 2.0.3 to 2.0.2. Reference the package directly from the project to select a different version

          一旦I added the NETStandard.Library nuget package 成为 B 的依赖项(显然是针对最新版本 2.0.3),错误就消失了,即使出现了新的警告:

          /usr/local/share/dotnet/sdk/2.1.403/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.DefaultItems.targets(5,5): 警告 NETSDK1023:“NETStandard.Library”的 PackageReference 是 包含在您的项目中。这个包被隐式引用 .NET SDK,您通常不需要从您的 项目。欲了解更多信息,请参阅https://aka.ms/sdkimplicitrefs (NETSDK1023) (GWallet.Frontend.XF)

          【讨论】:

          • 我按照您的解释更新了项目“B”,但对我不起作用。但谢谢。这让我对找到其他解决方案有所了解
          • 请将您的解决方案作为新答案发布
          • 还没有找到。但我试图先删除 A 和 B 之间的依赖关系,然后使 A 和 B 依赖于相同版本的 X,然后再次添加 A 和 B 之间的依赖关系
          【解决方案10】:
          1. 识别检测到的包裹。例如在我的情况下,它是 System.Diagonistics.DiagonsticSource

          2. 从您的项目中查找此程序集引用的位置 (参考 > 属性 > 路径)

          3. 复制路径并检查。就我而言, 项目正在引用 4.6.0,但我将要使用的程序集 安装需要 5.0.0 版本 System.Diagonistics.DiagonsticSource 为最小值

          1. 转到项目的管理 NuGet 包并搜索 “System.Diagonistics.DiagonsticSource”和 更新。请记住,这也可能导致另一个“检测到 包降级”错误(如果出现这种情况,您应该返回第一步 发生)

          2. 现在,安装您最初想要安装的程序集(在我的 如果是 Microsoft.ApplicationInsights)

          【讨论】:

            【解决方案11】:

            从项目中手动删除 nuget 包依赖项,并为它们中的每一个安装包解决了我的问题。

            【讨论】:

              【解决方案12】:

              我试图将 Microsoft.AspNetcore.MVC 升级到版本 2+。我的解决方案是先将所有其他依赖项升级到 2+,然后最后升级 .MVC。

              【讨论】:

                【解决方案13】:

                我可以通过下载导致问题的早期版本的包来解决问题,这似乎是由于依赖于未安装的 .NET Standard 版本引起的,这也应该通过更新 Visual Studio 来解决。

                【讨论】:

                  【解决方案14】:

                  如果您在netcoreapp3.1 中遇到Razor 的此错误,您只需将项目SDK 从Microsoft.NET.Sdk.Razor 更改为Microsoft.NET.Sdk

                  【讨论】:

                  • 骑手怎么做?
                  • @kuldeep 用 F4 打开csproj 并替换文字
                  【解决方案15】:

                  所以,请尝试完全卸载该软件包并重新安装。 确保为所有引用它的解决方案项目执行此操作。 然后只需清理并重建。这对我有用。

                  【讨论】:

                    【解决方案16】:

                    对我来说,问题是我在本地安装了比我引用的项目版本更高的软件包。如果您转到 工具 > NuGet 包管理器 > 包管理器设置 > 常规 > 清除所有 NuGet缓存然后重建您的解决方案,它将安装引用的包并且错误将消失。

                    【讨论】:

                    • 如果你的包源/网络很慢,这是一个非常糟糕的主意,因为加载所有包可能需要很长时间
                    • 我不知道为什么这会解决问题。但是,检索所有包需要一段时间。
                    • 我从 3 到 24 个错误...至少它们都是不同的错误
                    【解决方案17】:

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

                    包参考:

                    Package A
                    Package B
                        Package A
                    

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

                    【讨论】:

                      【解决方案18】:

                      对我来说,这是由使用指定版本的 Microsoft.AspNetCore.App 引用的项目引起的,而我的项目没有:

                      我的项目:

                        <ItemGroup>
                          <PackageReference Include="Microsoft.AspNetCore.App"/>
                        </ItemGroup>
                      

                      参考项目:

                        <ItemGroup>
                          <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.2" />
                        </ItemGroup>
                      

                      修复(我的项目):

                        <ItemGroup>
                          <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.2" />
                        </ItemGroup>
                      

                      【讨论】:

                        【解决方案19】:

                        我最近才遇到这个问题,更新 NuGet 包对我有用。

                        【讨论】:

                        • 究竟是什么 nuget 包?这个答案很模棱两可
                        【解决方案20】:

                        感谢this answer,我解决了这个问题。基本上,只需在您的 .csproj 文件中的 &lt;PropertyGroup&gt; 标记内添加以下行:

                        <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2019-10-10
                          • 1970-01-01
                          • 2018-10-21
                          • 1970-01-01
                          • 2019-12-01
                          • 2018-06-16
                          • 1970-01-01
                          相关资源
                          最近更新 更多