ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

https://i.stack.imgur.com/m6d9K.png

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

https://i.stack.imgur.com/Ozt7k.png

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

https://i.stack.imgur.com/efeSv.png

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

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

J
Jimmy Shaw

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

我打开 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 时,我没有找到任何东西。
S
Stephen Elmendorf

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

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

例子:

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


j
johnnyRose

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

网络应用项目:

<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>

库项目:

<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>

G
Gerard Wilkinson

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

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

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

更新 21/09/17

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


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

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

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

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

...
</Project>

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


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

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

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

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


E
Emil

尝试删除:

<IsPackable>false</IsPackable>

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

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

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

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

尝试使用 NuGet

我得到:

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

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

dotnet add package System.Net.NameResolution

请参阅NuGet Errors - NU1605

问题:

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

解决方案:

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


k
knocte

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

我有两个库 A 和 B。库 A 依赖于某个 nuget 包 X,而库 B 依赖于 A。一旦我将 X 升级到新版本,不知何故它开始依赖于 NETStandard.Library nuget package 的新版本(从 2.0.1 开始)。 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 之间的依赖关系
u
user890255

识别检测到的包裹。例如在我的例子中,它是 System.Diagonistics.DiagonsticSource 从你的项目中找到这个程序集引用的位置(参考>属性>路径)复制路径并检查。就我而言,该项目引用的是 4.6.0,但我要安装的程序集需要 System.Diagonistics.DiagonsticSource 的 5.0.0 版本作为最低要求

https://i.stack.imgur.com/zNq7c.png

转到项目的管理 NuGet 包并搜索“System.Diagonistics.DiagonsticSource”并更新。请记住,这也可能导致另一个“检测到包降级”错误(如果发生这种情况,您应该返回到第一步)现在,安装您最初想要安装的程序集(在我的情况下是 Microsoft.ApplicationInsights)


M
Max Favilli

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


E
Eric

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


m
mshwf

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


B
Boiethios

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


如何在骑手中做到这一点?
@kuldeep 用 F4 打开 csproj 并替换文本
e
eva

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


D
Dystar

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


如果您的包馈送/网络很慢,这是一个非常糟糕的主意,因为加载所有包可能需要很长时间
我不确定为什么这会解决问题。但是,检索您的所有包裹需要一段时间。
我从 3 个错误变成了 24 个错误……至少它们都是不同的错误
D
Dharman

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

包参考:

Package A
Package B
    Package A

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


S
Steef

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

c
combatc2

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


究竟什么nuget包?这个答案很模棱两可
S
Shaul Behr

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

<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>