NuGet 警告 NU1605

範例 1

偵測到的套件降級: 'PackageB' 從 4.0.0 降級至 3.5.0。 直接從項目參考套件,以選取不同的版本。
'Project' -> 'PackageA' 4.0.0 -> 'PackageB' (>= 4.0.0)
'Project' -> 'PackageB' (>= 3.5.0)

問題

相依性套件在比最終解析的更高版本套件上指定版本條件約束。 這是因為 直接相依性-wins 規則 - 解析套件時,子檔中的直接套件版本將會覆寫相同標識碼的遠距套件版本。

解決方案

若要顯示還原警告的專案,請將套件參考新增至較高版本的套件。

在上述範例中,您會將套件參考變更為 PackageB 4.0.0:

  'PackageA' 4.0.0 -> 'PackageB' 4.0.0
'PackageB' 4.0.0

範例 2

偵測到的套件降級: 'PackageC' 從 2.0.0 降級至 1.1.0。 直接從項目參考套件,以選取不同的版本。
'Project' -> 'PackageA' 1.0.0 -> 'PackageB' 2.0.0 ->'PackageC' (>= 2.0.0)
'Project' -> 'PackageA' 1.0.0 -> 'PackageC' (>= 1.1.0)

問題

相依性套件在比最終解析的更高版本套件上指定版本條件約束。 這是因為 直接相依性-wins 規則 - 解析套件時,NuGet 會嘗試接受套件作者的意圖。 的作者PackageA已從 2.0.0 PackageC 明確降級為 PackageC 1.1.0。

解決方案

若要顯示還原警告的專案,請將套件參考新增至較高版本的套件。

在上述範例中,您會將套件參考變更為 PackageC 2.0.0:

  'PackageA' 4.0.0 -> 'PackageB' 4.0.0
'PackageB' 4.0.0

範例 3

Detected package downgrade: System.IO.FileSystem.Primitives from 4.3.0 to 4.0.1. Reference the package directly from the project to select a different version.
Project -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.IO.FileSystem.Primitives (>= 4.3.0)
Project -> System.IO.FileSystem 4.0.1 -> System.IO.FileSystem.Primitives (>= 4.0.1)

問題

.NET Core 1.0 和 1.1 隨附的某些套件組合在 .NET Core 3.0 或更高版本專案中一起參考時,彼此不相容,而且指定 RuntimeIdentifier。 有問題的套件通常會以 System.Microsoft.開頭,且版本號碼介於 4.0.0 和 4.3.1 之間。 在此情況下,降級訊息的套件會從相依性鏈結中的 開始 runtime.<RID>

解決方案

若要解決此問題,請新增下列 PackageReference:

<PackageReference Include="Microsoft.NETCore.Targets" Version="3.0.0" PrivateAssets="all" />

您可以選擇使用 version 與 SDK 主要版本相符的 。

範例 4

偵測到的套件降級:Microsoft.NETCore.App 從 2.1.8 降級至 2.1.0。 直接從項目參考套件,以選取不同的版本。
test -> mvc -> Microsoft.NETCore.App (>= 2.1.8)
test -> Microsoft.NETCore.App (>= 2.1.0)

問題

mvc 專案在套件的較高版本上指定版本條件約束,而不是最終解析的還原。 這是因為 直接相依性-wins 規則 - 解析套件時,圖形中直接參考套件的版本會覆寫相同標識符的遠距套件版本。

解決方案

將 .NET Core SDK 移至 2.2.100 或更新版本,藉此改善此特定錯誤(Microsoft.NETCore.App 套件)。 Microsoft.NETCore.App 是 .NET Core SDK 3.0.100 版之前選擇自動引進的自動參考套件。 另請參閱 獨立式部署運行時間向前復原。

注意

雖然 NuGet 工具會將 NU1605 視為警告, 但 .NET SDK 會選擇透過 將此警告視為錯誤 WarningsAsErrors。 您的專案可能會藉由將 設定 TreatWarningsAsErrors 為 ,將此警告升級為 true錯誤。 雖然不建議這麼做,因為您更有可能遇到運行時間問題,但您可以選擇 隱藏 此警告。

提示

替代解決方案:NuGetSolver 是由 Microsoft DevLabs 開發的 Visual Studio 延伸模組,其設計目的是協助解決相依性衝突。 它會自動化識別和解決這些問題的程式。 如需進一步的詳細數據,請流覽 Visual Studio Marketplace上的 NuGetSolver 頁面,我們很樂意聽到您對體驗的意見反應。