NuGet 警告 NU1605

例 1

パッケージのダウングレードが検出されました。'PackageB' が 4.0.0 から 3.5.0 に変更されています。 プロジェクトからパッケージを直接参照して、別のバージョンを選択します。
'Project' -> 'PackageA' 4.0.0 -> 'PackageB' (>= 4.0.0)
'Project' -> 'PackageB' (>= 3.5.0)

問題点

依存関係パッケージで、最終的に解決された復元よりも高いバージョンのパッケージに対するバージョン制約が指定されました。 これは、直接依存関係優先ルールが原因です。パッケージを解決すると、部分グラフ内の直接参照されたパッケージ バージョンによって、同じ ID を持つ離れたパッケージのバージョンがオーバーライドされます。

解決策

復元の警告が表示されているプロジェクトに、パッケージ参照を上位バージョンのパッケージに追加します。

上記の例では、次のように、パッケージ参照を 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)

問題点

依存関係パッケージで、最終的に解決された復元よりも高いバージョンのパッケージに対するバージョン制約が指定されました。 これは、直接依存関係優先ルールが原因です。パッケージを解決するときに、NuGet はパッケージ作成者の意図を尊重しようとします。 PackageA の作成者は、PackageC 2.0.0 から 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" />

SDK のメジャー バージョンに一致する version を使用する方法もあります。

例 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 プロジェクトで、最終的に解決された復元よりも上位のバージョンのパッケージに対するバージョン制約が指定されています。 これは、直接依存関係優先ルールが原因です。パッケージを解決すると、グラフ内の直接参照されたパッケージのバージョンによって、同じ ID を持つ離れたパッケージのバージョンがオーバーライドされます。

解決策

この特定のエラー (Microsoft.NETCore.App パッケージ関連) は、.NET Core SDK を 2.2.100 以降に移行することで改善されます。 Microsoft.NETCore.App は、バージョン 3.0.100 より前の .NET Core SDK が自動的に取り込む場合に選択する自動参照パッケージです。 「自己完結型展開ランタイムのロール フォワード」も参照してください。

Note

NU1605 は NuGet ツールによる警告と見なされますが、.NET SDK では、この警告を WarningsAsErrors を通じたエラーとして処理することを選択します。 プロジェクトで TreatWarningsAsErrorstrue に設定されていて、この警告がエラーにアップグレードされている可能性があります。 推奨されませんが、実行時の問題が発生する可能性が高い場合は、この警告を抑制することもできます。

ヒント

代替解決策: NuGetSolver は、依存関係の競合の解決を支援することを目的とする、Microsoft DevLabs によって開発された Visual Studio 拡張機能です。 これにより、これらの問題を特定して対処するプロセスが自動化されます。 詳細については、Visual Studio Marketplace の NuGetSolver ページを参照してください。エクスペリエンスに関するフィードバックをお聞かせください。