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
パッケージ ダウングレードが検出されました: System.IO.FileSystem.Primitives を 4.3.0 から 4.0.1 に。 プロジェクトからパッケージを直接参照して、別のバージョンを選択します。
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
を通じたエラーとして処理することを選択します。
プロジェクトで TreatWarningsAsErrors
が true
に設定されていて、この警告がエラーにアップグレードされている可能性があります。
推奨されませんが、実行時の問題が発生する可能性が高い場合は、この警告を抑制することもできます。
ヒント
代替ソリューション: NuGetSolver は、依存関係の競合の解決を支援することを目的とする、Microsoft DevLabs によって開発された Visual Studio 拡張機能です。 これにより、これらの issue を特定して対処するプロセスが自動化されます。 詳細については、Visual Studio Marketplace の NuGetSolver ページを参照してください。エクスペリエンスに関するフィードバックをお聞かせください。