我刚刚为我的解决方案(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
希望有人可以帮助我摆脱这些警告并设置应有的一切,以便我可以更新所有软件包。
我在打开现有解决方案后发生了这种情况,但它们不是警告,而是错误。
我打开 YourAwesomeApp.csproj 文件并逐一检查“检测到的包降级”错误,并手动将该行项目的版本从现有版本更改为错误本身显示的指定版本。
例如,如果错误显示降级检测到“SqlServer 1.0.4 -> 1.0.3”,则找到包 SqlServer 的行并将版本从 1.0.3 编辑为 1.0.4。
这些错误应该在构建项目后消失。
这样做的缺点是我这次只有 5 个错误,但是如果另一个人的项目包含 50 个这样的错误怎么办。那么那个人手动编辑这些行的任务将非常乏味和耗时。
这通常是因为您尝试安装的项目需要比您已经包含在项目中的子依赖项的更新版本。
解决方案是在安装包之前更新或删除项目中的现有依赖项。
例子:
检测到的包降级: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”,或者在安装包之前将其从项目中删除。
根据上面的答案,工作解决方案是从您的 csproj 文件中删除以下行。
网络应用项目:
<RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>
库项目:
<NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
在我的情况下,这些属性都没有在我的 csproj 文件中设置。
我不得不告诉 VS 通过 NuGet 更新这些包。
在从 1.0 迁移到 1.1 后,在解决显式引用隐式依赖 .NETCore.App 的警告后,这些警告出现在我面前。
更新 21/09/17
这似乎也影响升级到2.0,分辨率是一样的。使用 NuGet 手动更新这些包。感谢 IbrarMumtaz 指出这一点!
我能够修复一些错误,比如在 cproj 中添加 NoWarn
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<NoWarn>$(NoWarn);NU1605</NoWarn>
</PropertyGroup>
...
</Project>
您可能只想在多个软件包升级期间临时添加它,然后再将其删除。
通过从 csproj
文件中删除 <NetStandardImplicitPackageVersion>
元素,我能够在我的项目中消除这些警告。
有一些关于隐式元包的信息 in this article,这似乎是这个问题的根本原因。
您可能还需要更新一些依赖项。例如,我必须将 BenchmarkDotNet
从 0.10.1
升级到 0.10.3
以消除您所看到的一些警告。
尝试删除:
<IsPackable>false</IsPackable>
从您的项目文件中 - 这对我有用!
如果您仍然留下 NU1605
错误代码,您可以通过将以下内容添加到项目文件来忽略它:
<PropertyGroup>
<NoWarn>NU1605</NoWarn>
</PropertyGroup>
尝试使用 NuGet
我得到:
错误 NU1605:检测到包降级:System.Net.NameResolution 从 4.3.0 到 4.0.0。直接从项目中引用包以选择不同的版本。
所以我通过运行(在项目文件夹中)引用了包目录:
dotnet add package System.Net.NameResolution
问题:
依赖包指定了对更高版本的包的版本约束,而不是最终解决的还原。也就是说,由于解析包时的“最近获胜”规则,图中较近的包可能会覆盖较远的包。
解决方案:
为要使用的更高版本的包添加对项目的直接引用。
就我而言,此错误与 .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)
识别检测到的包裹。例如在我的例子中,它是 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)
从项目中手动删除 nuget 包依赖项,并为它们中的每一个安装包解决了我的问题。
我试图将 Microsoft.AspNetcore.MVC 升级到版本 2+。我的解决方案是首先将所有其他依赖项升级到 2+,然后最后升级 .MVC。
我可以通过下载导致问题的软件包的早期版本来解决问题,这似乎是由于取决于未安装的 .NET Standard 版本引起的,这也应该通过更新 Visual Studio 来解决。
如果您在 netcoreapp3.1
中收到 Razor
的此错误,您只需将项目 SDK 从 Microsoft.NET.Sdk.Razor
更改为 Microsoft.NET.Sdk
。
csproj
并替换文本
因此,请尝试完全卸载该软件包并重新安装。确保为所有引用它的解决方案项目执行此操作。然后只需清理并重建。这对我有用。
对我来说,问题是我在本地安装了比我引用的项目更高版本的软件包。如果您转到工具 > NuGet 包管理器 > 包管理器设置 > 常规 > 清除所有 NuGet 缓存然后重建您的解决方案,它将安装引用的包并且错误将会消失。
我有一个类似的问题,我的项目有这样的包引用:
包参考:
Package A
Package B
Package A
所以因为项目 B 引用了包 A,所以我只是从主包列表中删除了包 A,剩下的包 B 引用了包 A。我重建了解决方案,问题就消失了。
对我来说,这是由使用指定版本的 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>
我最近才遇到这个问题,更新 NuGet 包对我有用。
感谢this answer,我解决了这个问题。基本上,只需在 .csproj
文件的 <PropertyGroup>
标记内添加以下行:
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
dotnet restore
。