NuGet Peringatan NU5128

Skenario 1

Beberapa kerangka kerja target yang dideklarasikan dalam grup dependensi nuspec dan folder lib/ref tidak memiliki kecocokan yang tepat di lokasi lain. Lihat daftar tindakan di bawah ini:

  • Tambahkan grup dependensi untuk . NETStandard2.0 ke nuspec

Masalah

Direktori lib/<tfm>/ atau ref/<tfm>/ dalam paket berisi setidaknya satu file untuk Moniker Kerangka Kerja Target (TFM) yang ditentukan dalam pesan peringatan. Namun, tidak ada grup dependensi untuk TFM ini dalam nuspec file. Ini dapat menyebabkan konsumen paket percaya paket tidak kompatibel dengan TFM, bahkan jika paket tidak memiliki dependensi. Jika paket memiliki dependensi yang tidak dinyatakan, proyek yang menggunakan paket akan mengalami kesalahan runtime.

Solusi

  • Jalankan target paket NuGet pada proyek

Jika memungkinkan, gunakan target paket MSBuild NuGet, karena secara otomatis cocok dengan TFM perakitan dengan grup dependensi dari kerangka kerja target proyek. Perhatikan bahwa proyek Anda harus digunakan PackageReference untuk dependensi NuGet-nya sendiri. Jika proyek Anda menggunakan packages.config, Anda perlu menggunakan nuget.exe pack dan file nuspec .

  • File yang diedit nuspec secara manual

Jika Anda menggunakan file kustom nuspec , kami merekomendasikan setiap TFM yang lib/ ada atau ref/ rakitannya harus memiliki grup dependensi yang cocok, bahkan jika dependensinya sama dengan TFM yang kompatibel berikutnya. Misalnya, jika paket berisi netstandard1.0 dan netstandard2.0 rakitan, dan dependensinya sama untuk keduanya, kami sarankan kedua TFM dicantumkan sebagai grup dependensi dengan item dependensi duplikat.

Perhatikan bahwa pengidentifikasi TFM yang digunakan dalam jalur perakitan menggunakan format yang berbeda dengan pengidentifikasi TFM yang digunakan dalam grup dependensi. Pesan peringatan menentukan nama yang benar untuk digunakan dalam grup dependensi. Jika paket Anda tidak memiliki dependensi untuk kerangka kerja target tersebut, gunakan grup kosong. Contohnya:

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • lib/ Menghapus file atau ref/

Jika Anda tidak ingin paket Anda kompatibel dengan TFM yang dilaporkan, ubah proyek Anda sehingga tidak ada lib/<tfm>/ atau ref/<tfm>/ file dalam paket untuk TFM tersebut. Misalnya, jika peringatan mengatakan untuk menambahkan grup .NETFramework4.7.2 dependensi ke nuspec, maka hapus file dan ref/net472/* apa pun lib/net472/* dari paket Anda.

Skenario 2

Beberapa kerangka kerja target yang dideklarasikan dalam grup dependensi nuspec dan folder lib/ref tidak memiliki kecocokan yang tepat di lokasi lain. Lihat daftar tindakan di bawah ini:

  • Menambahkan rakitan lib atau ref untuk kerangka kerja target netstandard2.0

Masalah

File nuspec memiliki grup dependensi untuk Target Framework Moniker (TFM) yang dilaporkan, tetapi tidak ada rakitan untuk TFM ini baik lib/ di atau ref/. Jika ada rakitan untuk TFM yang kompatibel, paket akan tetap diinstal, tetapi dependensi mungkin salah untuk rakitan yang digunakan pada waktu kompilasi dan dapat menyebabkan proyek gagal pada runtime.

Solusi

  • Jalankan target paket NuGet pada proyek

Jika memungkinkan, gunakan target paket MSBuild NuGet, karena secara otomatis cocok dengan TFM perakitan dengan grup dependensi dari kerangka kerja target proyek. Perhatikan bahwa proyek Anda harus digunakan PackageReference untuk dependensi NuGet-nya sendiri. Jika proyek Anda menggunakan packages.config, Anda perlu menggunakan nuget.exe pack dan file nuspec .

  • Mengedit nuspec file secara manual

Tambahkan TFM yang dilaporkan sebagai Kerangka Kerja Target tambahan tempat proyek Anda dikompilasi, dan tambahkan rakitan ke paket. Jika Anda menggunakan proyek gaya SDK untuk beberapa TFM multi-target, target paket MSBuild NuGet dapat secara otomatis menambahkan rakitan di folder yang benar lib/<tfm>/ dan membuat grup dependensi dengan TFM dan dependensi yang benar. Jika Anda menggunakan proyek gaya non-SDK, Anda mungkin perlu membuat file proyek tambahan untuk TFM tambahan, dan memodifikasi file Anda nuspec untuk menyalin rakitan output di lokasi yang benar dalam paket.

  • Menambahkan file kosong _._

Jika paket Anda tidak berisi rakitan apa pun, seperti paket meta, pertimbangkan untuk menambahkan file kosong _._ ke lib/<tfm>/ direktori untuk TFM yang tercantum dalam pesan peringatan. Misalnya, jika peringatan mengatakan untuk menambahkan rakitan untuk netstandard2.0 kerangka kerja target, buat file kosong lib/netstandard2.0/_._ di paket Anda.

  • Menghapus grup dependensi

Jika Anda menggunakan file kustom nuspec , hapus grup dependensi untuk TFM yang dilaporkan, hanya menyisakan grup dependensi untuk TFM yang lib/<tfm>/ ada atau ref/<tfm>/ filenya.

  • Hapus semua dependensi untuk paket yang tidak terkait dengan rakitan

Jika paket Anda tidak berisi file atau ref/ apa pun lib/ dan bukan paket meta, kemungkinan tidak memiliki dependensi yang dibutuhkan konsumen paket. Jika Anda mengemas dengan target MSBuild Pack NuGet, Anda dapat mengaturnya <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking> dalam file PropertyGroup proyek Anda. Jika Anda menggunakan file kustom nuspec , hapus <dependencies> elemen .

  • Skenario lain

Peringatan ini ditambahkan selama pengembangan NuGet 5.3, dan pertama kali tersedia di Pratinjau .NET Core SDK 3.0 9. NuGet/Home#8583 melacak masalah di mana peringatan dimunculkan dalam terlalu banyak skenario. Anda dapat menggunakan NoWarn properti MSBuild (tambahkan <NoWarn>$(NoWarn);NU5128</NoWarn> ke apa pun PropertyGroup dalam file proyek Anda). Jika Anda memiliki beberapa proyek yang terpengaruh, Anda dapat menggunakan Directory.Build.targets untuk secara otomatis menambahkan NoWarn ke semua proyek.