NuGet 警告 NU5128
シナリオ 1
nuspec ファイルの依存関係グループで宣言されているターゲットフレームワークと、lib/ref フォルダ内の対応するターゲットフレームワークが完全に一致していません。 以下のアクションのリストをご覧ください。
- .NETStandard2.0 の依存関係グループを nuspec に追加します。
問題点
lib/<tfm>/
パッケージ内のディレクトリref/<tfm>/
に、警告メッセージで指定されたターゲット フレームワーク モニカー (TFM) のファイルが少なくとも 1 つ含まれています。 ただし、この TFM では、nuspec
ファイル内に依存関係グループは存在しません。 これにより、パッケージのコンシューマーは、パッケージに依存関係がない場合でも、パッケージが TFM と互換性がないと考える可能性があります。 パッケージに未宣言の依存関係がある場合、パッケージを使用しているプロジェクトでは実行時エラーが発生します。
解決策
- プロジェクト内で NuGet のパック ターゲットを実行する
可能であれば、NuGet の MSBuild パック ターゲットを使用 します。これは、プロジェクトのターゲット フレームワークの依存関係グループを持つアセンブリ TFM と自動的に一致します。 プロジェクトは、それぞれの NuGet 依存関係で PackageReference
を使用する必要があります。 プロジェクトで packages.config を使用する場合は、nuget.exe pack
およびnuspec
ファイルを使用する必要があります。
- 手動で編集した
nuspec
ファイル
カスタム nuspec
ファイルを使用していれば、依存関係が次の互換性のある TFM と同じである場合でも、lib/
または ref/
のアセンブリが存在する各 TFM に一致する依存関係グループを含めることをおすすめします。 例えば、パッケージ内にnetstandard1.0
およびnetstandard2.0
アセンブリーが含まれており、依存関係が両方とも同じである場合は、重複する依存関係項目を「依存関係グループ」として、両方のTFM をリスト表示できます。
ノート: アセンブリ パスで使用される TFM 識別子は、依存関係グループで使用される TFM 識別子とは異なる形式を使用します。 警告メッセージでは、依存関係グループ内で使用するために、適切な名前を特定します。 パッケージに、そのターゲット フレームワークでの依存関係がまったくない場合は、空のグループを使用します。 次に例を示します。
<package>
<metadata>
...
<dependencies>
<group targetFramework=".NETFramework4.7.2" />
</dependencies>
</metadata>
...
</package>
lib/
またはref/
ファイルを削除
報告された TFM とパッケージが互換性を持たないようにするには、その TFM のパッケージにlib/<tfm>/
またはref/<tfm>/
ファイルが含まれないように、プロジェクトを変更します。 例えば、.NETFramework4.7.2
の依存関係グループをnuspec
に追加するように警告で表示されている場合は、お使いのパッケージから任意のlib/net472/*
およびref/net472/*
ファイルを削除します。
シナリオ 2
nuspec ファイルの依存関係グループで宣言されているターゲットフレームワークと、lib/ref フォルダ内の対応するターゲットフレームワークが完全に一致していません。 以下のアクションのリストをご覧ください。
- netstandard2.0 ターゲット フレームワークの lib アセンブリまたは ref アセンブリを追加する
問題点
このnuspec
ファイルには、報告されたターゲット フレームワーク モニカー (TFM) の依存関係グループがありますが、lib/
またはref/
のいずれかにこの TFM のアセンブリは存在しません。 互換性のある TFM のアセンブリがある場合、パッケージは引き続きインストールされますが、コンパイル時に使用されるアセンブリの依存関係が正しくなく、ランタイムでプロジェクトが失敗する可能性があります。
解決策
- プロジェクト内で NuGet のパック ターゲットを実行する
可能であれば、NuGet の MSBuild パック ターゲットを使用 します。これは、プロジェクトのターゲット フレームワークの依存関係グループを持つアセンブリ TFM と自動的に一致します。 プロジェクトは、それぞれの NuGet 依存関係で PackageReference
を使用する必要があります。 プロジェクトで packages.config を使用する場合は、nuget.exe pack
およびnuspec
ファイルを使用する必要があります。
- ファイルを手動で編集する
nuspec
レポートされた TFM をプロジェクトのコンパイル対象となる追加のターゲット フレームワークとして追加し、アセンブリをパッケージに追加。 SDK スタイル プロジェクトを使用して複数の TFM を複数ターゲットにしている場合、NuGet の MSBuild パック ターゲットは、適切な lib/<tfm>/
フォルダーにアセンブリを自動追加、適切なTFM と依存関係を持つ依存関係グループを作成できます。 SDK 以外のスタイルのプロジェクトを使用していれば、追加のTFM 用に追加のプロジェクト ファイルを作成し、パッケージ内の正しい場所に出力アセンブリをコピーするようにnuspec
ファイルを 変更する必要があります。
- 空の
_._
ファイル追加
パッケージにメタ パッケージなどのアセンブリが含まれていなければ、警告メッセージに記載されている TFM のlib/<tfm>/
ディレクトリに空の_._
ファイルを追加することを検討してください。 例えば、netstandard2.0
ターゲット フレームワークのアセンブリを追加するように警告が表示された場合は、パッケージに空Empty lib/netstandard2.0/_._
のファイルを作成します。
- 依存関係グループを削除する
カスタム nuspec
ファイルを使用する場合は、報告された TFM の依存関係グループを削除し、lib/<tfm>/
かref/<tfm>/
ファイルが存在する TFM の依存関係グループのみを残します。
- アセンブリに関連しないパッケージのすべての依存関係を削除する
パッケージにlib/
かref/
のファイルが含まれていず、メタ パッケージでない場合は、パッケージ コンシューマーに必要な依存関係がない可能性があります。 NuGet の MSBuild Pack ターゲットを使用してパックする場合は、プロジェクト ファイル内の任意のPropertyGroup
ファイルに<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
を設定できます。 カスタム nuspec
ファイルを使用していれば、<dependencies>
要素を削除します。
- その他のシナリオ
この警告は NuGet 5.3 の開発中に追加され、最初は .NET Core SDK 3.0 プレビュー 9 で使用できます。 NuGet/Home#8583 は、多すぎるシナリオで警告が発生していた課題を追跡します。 NoWarn
MSBuild プロパティを使用できます (プロジェクト ファイル内の任意のPropertyGroup
に<NoWarn>$(NoWarn);NU5128</NoWarn>
を追加します)。 影響を受けるプロジェクトが複数ある場合は、すべてのプロジェクトにNoWarn
を自動的に追加するためにDirectory.Build.targets
を使用できます。