检测到软件包降级警告(dotnet核心,与2017年相比)


75

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

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

NETStandard.Library降级警告


更新:我仍然收到上述警告。我的Web项目警告Microsoft.NETCore.App软件包(请参见下面的屏幕截图),我的lib项目警告有关NETStandard.Library(请参见上面的屏幕截图)

Microsoft.NETCore.App降级警告

尝试在NuGet软件包管理器中更新Microsoft.NETCore.App时,出现以下错误:

NuGet升级错误

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


您可以发布.csproj文件的内容吗?
Drew Noakes

Answers:


34

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

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

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

这些错误应在构建项目后消失。

不利的一面是,这次我只有5个错误,但是如果另一个人的项目包含50个这样的错误该怎么办。然后,该人手动编辑这些行的任务将非常繁琐且耗时。


2
当我之后dotnet restore对失败的项目进行处理时,这对我有用。
Aage

2
为我工作,但必须执行“清洁解决方案”,然后进行构建。
内维尔,

检测到的包降级:Microsoft.Extensions.Logging从3.1.3到2.2.0。直接从项目中引用包以选择其他版本。当我搜索Microsoft.Extensions.Logging时,我没有找到任何东西。
Gopi

25

按照上面的答案,有效的解决方案是从csproj文件中删除以下行。

Web App项目:

<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>

库项目:

<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>

22

通常会发生这种情况,因为您尝试安装的项目需要比您项目中已经包含的子依赖项更高的版本。

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

例:

检测到的软件包降级: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”,或者只是在安装软件包之前将其从项目中删除。


19

在我的情况下,这些属性均未在csproj文件中设置。

我不得不告诉VS通过NuGet更新那些软件包。

从1.0更改为1.1后,解决了对隐式依赖项.NETCore.App的显式引用的警告后,出现了警告。

更新21/09/17

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


我现在从1.1> 2.0开始发生这种情况。:?
IbrarMumtaz

几乎绝对最好是明确设置软件包的版本,而不要忽略警告或尝试其他更通用的解决方案。如果要避免降级,请明确说明。这是最好的答案。
Dan Field,

6
除非nuget不允许您!恶梦。
奥利弗

13

我能够解决一些错误,例如在cproj中添加NoWarn

<Project Sdk="Microsoft.NET.Sdk">

 <PropertyGroup>
    <NoWarn>$(NoWarn);NU1605</NoWarn>
  </PropertyGroup>

...
</Project>

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


11

通过<NetStandardImplicitPackageVersion>csproj文件中删除元素,我能够消除项目中的这些警告。

有一些信息在这篇文章中有关模糊综合包,这似乎是这个问题的根本原因。

您可能还需要更新一些依赖项。例如,我必须从升级BenchmarkDotNet0.10.10.10.3以消除一些警告,例如您看到的警告。


6

尝试删除

<IsPackable>false</IsPackable>

从您的项目文件中-这对我有用!

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

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

我做了nowarn解决方案,以便能够将最新的3.1.0-preview4.19579.2发布到azure webapp。
Magnus Karlsson,

是的,只要您可以在构建中忽略此特定警告,就可以这样做:)
Emil,

6

尝试使用NuGet

我得到:

错误NU1605:检测到程序包降级:System.Net.NameResolution从4.3.0到4.0.0。直接从项目中引用该软件包以选择其他版本。

因此,我通过运行(在项目文件夹中)引用了软件包目录:

dotnet add package System.Net.NameResolution

查看NuGet错误-NU1605

问题:

依赖性软件包在比最终解决的还原更高的软件包版本上指定了版本约束。也就是说,由于解析包时的“最近获胜”规则,图中的较近包可能会覆盖较远的包。

解:

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


2

从我的项目中手动删除nuget软件包的依赖关系,并为每个软件包安装Install-Package,以解决我的问题。


2

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

我有两个库A和B。库A依赖于某些nuget包X,而库B依赖于A。一旦将X升级到新版本,它就开始以某种方式依赖于新版本的NETStandard.Library nuget包(来自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

一旦将NETStandard.Library nuget软件包添加为对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”,但对我不起作用。但是谢谢。这使我对找到其他解决方案
有了

请发布您的解决方案作为新答案
knocte

仍未找到。但我想先删除A和B之间的依赖关系,然后使A和B依赖于相同版本的X,然后再次添加A和B之间的依赖关系
Pajri Aprilio,

1

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


1

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


1

如果您收到此错误Razornetcoreapp3.1,你只需要到项目的SDK从改变Microsoft.NET.Sdk.RazorMicrosoft.NET.Sdk


1
骑手该怎么做?
kuldeep'Mar

1
@kuldeepcsproj用F4打开并替换文字
Boiethios

1

我有一个类似的问题,我的项目中的软件包参考如下:

套件参考:

Package A
Package B
    Package A

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


0

我最近才遇到这个问题,更新NuGet软件包对我来说很有用。


什么是nuget包?这个答案非常模棱两可
knocte

0

因此,请尝试完全卸载该软件包,然后重新安装。确保您为所有解决方案项目都引用了它。然后清理并重建。这对我有用。


0

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


如果您的数据包订阅源/网络很慢,这是一个非常糟糕的主意,因为它可能需要很长时间才能加载所有数据包
Tharaka

我不知道为什么这会解决问题。但是,将需要一段时间来检索所有针对您的软件包。
Ben Power

0

对我来说,这是由于使用指定版本的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>

-2

有了这个答案,我解决了这个问题。基本上,只需<PropertyGroup>.csproj文件中的标签内添加以下行:

<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.