检测到包降级警告(dotnet core,vs 2017)

Nik*_*Nik 49 .net csproj nuget .net-core visual-studio-2017

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

我现在收到以下警告,我真的不知道他们的意思.

NETStandard.Library降级警告


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

Microsoft.NETCore.App降级警告

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

NuGet升级错误

希望有人可以帮助我摆脱这些警告并设置它应有的一切,这样我就可以更新我的所有包裹.

提前致谢!

小智 32

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

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

例子:

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


Nik*_*Nik 21

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

Web App项目:

<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

Lib项目:

<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
Run Code Online (Sandbox Code Playgroud)


Jim*_*haw 20

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

我打开了YourAwesomeApp.csproj文件并逐个检查了"检测到的软件包降级"错误,并手动将该订单项的版本从现有版本更改为错误本身中显示的指定版本.

例如,如果Error说降级检测到"SqlServer 1.0.4 - > 1.0.3",则找到包SqlServer的行,并将版本从1.0.3编辑到1.0.4.

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

这样做的缺点是这次我只有5个错误,但如果另一个人的项目包含50个这样的错误会怎样.那个人手动编辑这些行的任务将非常繁琐且耗时.

  • 这对我有用,后来我对无法构建项目进行了“dotnet restore”。 (2认同)
  • 为我工作,但必须做一个“干净的解决方案”,然后构建。 (2认同)

Ger*_*son 16

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

我不得不告诉VS通过NuGet更新这些软件包.

在从1.0移动到1.1之后解析显式引用隐式依赖.NETCore.App的警告之后,我出现了警告.

更新21/09/17

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

  • 除非nuget不会让你!恶梦. (5认同)

Dre*_*kes 10

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

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

您可能还需要更新一些依赖项.例如,我不得不升级BenchmarkDotNet,0.10.10.10.3摆脱一些警告,如你所看到的.


mra*_*api 10

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

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

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

...
</Project>
Run Code Online (Sandbox Code Playgroud)

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

  • 唯一的问题是“暂时”不可避免地会变成永久。要么进行更改的人忘记将其更改回来,要么没有记录它,并且维护工作会被传递给从一开始就不知道临时修复的其他人。或者他们从来没有时间去处理它,它最终会消失在时间的迷雾中,一成不变。 (4认同)

Rob*_*ker 6

尝试使用 NuGet

我得到:

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

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

dotnet add package System.Net.NameResolution
Run Code Online (Sandbox Code Playgroud)

请参阅NuGet 错误 - NU1605

问题:

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

解决方案:

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


Emi*_*mil 6

尝试删除

<IsPackable>false</IsPackable>
Run Code Online (Sandbox Code Playgroud)

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

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

<PropertyGroup>
    <NoWarn>NU1605</NoWarn>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)


小智 5

  1. 识别检测到的包。例如,在我的例子中,它是 System.Diagonistics.DiagonsticSource 在此输入图像描述

  2. 从项目中查找此程序集引用的位置(引用 > 属性 > 路径) 在此输入图像描述

  3. 复制路径并检查。就我而言,该项目引用 4.6.0,但我要安装的程序集至少需要 System.Diagonistics.DiagonsticSource 版本 5.0.0

在此输入图像描述

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

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