情景再現
舉個栗子: 你的類庫引用了 log4net 2.0.8 ( log4net 依賴.NETStandard 1.3) 而你的項目使用了.NET Core 3 , 此時就有可能出現警告,或者編譯時報錯 NU1605。
嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態
錯誤 檢測到包降級: System.IO.FileSystem 從 4.3.0 降級到 4.0.1。直接從項目引用包以選擇不同版本。
XXX.YYY.API -> XXX.YYY -> log4net 2.0.8 -> System.Net.Sockets 4.1.0 -> runtime.win.System.Net.Sockets 4.3.0 -> System.IO.FileSystem (>= 4.3.0)
XXX.YYY.API -> XXX.YYY -> log4net 2.0.8 -> System.IO.FileSystem (>= 4.0.1) XXX.YYY.API E:\Sources\new\VX.XXX\XXX.YYY.API\XXX.YYY.API.csproj 0
原因
依賴項包在包的更高版本上指定了版本約束,而不是最終解析還原。 這是由於最接近的 wins規則-解析包時,圖形中的 "即將出現的包" 的版本將覆蓋具有相同 ID 的遠處包的版本。
解決辦法
參考 微軟文檔 https://docs.microsoft.com/zh-cn/nuget/reference/errors-and-warnings/nu1605
- 在項目中出現還原錯誤時,將包引用添加到包的更高版本。
- 當在 .NET Core 3.0 或更高版本的項目中同時引用時,與 .NET Core 1.0 和1.1 隨附的某些包組合不兼容。 問題包通常以 System. 或 Microsoft. 開頭,並具有4.0.0 和4.3.1 之間的版本號。 在這種情況下,降級消息將具有從運行時開始的包。 依賴關系鏈。
若要解決此問題,請添加以下 PackageReference:
<PackageReference Include="Microsoft.NETCore.Targets" Version="3.0.0" PrivateAssets="all" />
參考
https://docs.microsoft.com/zh-cn/nuget/reference/errors-and-warnings/nu1605
https://www.nuget.org/packages/log4net/
感謝博客園問答里的園友的提示,我找不到你了~~
聲明
本文采用知識共享署名-非商業性使用-相同方式共享 2.5 中國大陸許可協議進行許可,發表在CSDN和博客園,歡迎讀者轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接!請讀者/爬蟲們尊重版權