Host menentukan aset khusus RID

Saat menjalankan aplikasi dengan aset tertentu pengidentifikasi runtime (RID), host menentukan aset apa yang relevan untuk platform tempatnya berjalan. Ini berlaku untuk aplikasi itu sendiri dan logika resolusi yang digunakan oleh AssemblyDependencyResolver.

Sebelumnya, host mencoba menghitung RID pada run time dan kemudian membaca grafik RID untuk menentukan aset khusus RID mana yang cocok atau kompatibel dengan RID komputasi. Sekarang, perilaku default tidak menghitung RID atau menggunakan grafik RID. Sebaliknya, host bergantung pada daftar RID yang diketahui berdasarkan bagaimana runtime itu sendiri dibangun.

Perilaku sebelumnya

Sebelumnya, proses untuk memilih aset khusus RID adalah:

  1. Baca grafik RID dari file .deps.json kerangka kerja akar (Microsoft.NetCore.App).
  2. Komputasi RID saat ini pada waktu proses dan coba temukan entri untuk itu di grafik RID. Jika tidak ada, periksa FALLBACK RID (dibangun ke dalam host pada waktu kompilasi).
  3. Mulai dari entri yang ditemukan dalam grafik RID, cari aset yang cocok dengan RID tersebut.
  4. Lanjutkan ke bawah daftar RID dalam entri grafik RID hingga kecocokan aset ditemukan atau daftar berakhir.

Jika grafik RID tidak memiliki RID komputasi atau RID fallback, aset RID tidak diselesaikan dengan benar.

Perilaku yang baru

Secara default, proses tidak lagi bergantung pada grafik RID. Sebaliknya, ia memeriksa serangkaian RID portabel yang diketahui berdasarkan bagaimana host dibangun. Contohnya:

Linux

  • linux-x64
  • linux
  • unix-x64
  • Unix
  • any

Windows

  • win-x64
  • win
  • any

macOS

  • osx-x64
  • Osx
  • unix-x64
  • Unix

Untuk build host atau runtime yang tidak portabel, build mungkin juga mengatur RID non-portabel yang diperiksa terlebih dahulu.

Versi yang diperkenalkan

Pratinjau .NET 8 5

Jenis perubahan yang melanggar

Perubahan ini dapat memengaruhi kompatibilitas biner dan juga merupakan perubahan perilaku.

Alasan untuk berubah

Grafik RID sangat mahal untuk dipertahankan dan dipahami, mengharuskan .NET itu sendiri untuk sadar distro dengan cara yang rapuh. Tim .NET dan komunitas menghabiskan waktu yang tidak sepele untuk memperbarui grafik dan mendukung pembaruan tersebut ke rilis sebelumnya. Tujuan jangka panjang adalah untuk berhenti memperbarui grafik RID, berhenti membacanya, dan akhirnya menghapusnya. Perubahan yang melanggar ini adalah langkah menuju tujuan tersebut.

Gunakan RID portabel, misalnya, , linux, linux-muslosx, dan win. Untuk kasus penggunaan khusus, Anda dapat menggunakan API seperti NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) atau AssemblyLoadContext.ResolvingUnmanagedDll untuk logika pemuatan kustom.

Jika Anda perlu kembali ke perilaku sebelumnya, atur sakelar System.Runtime.Loader.UseRidGraph kompatibilitas mundur ke true dalam file runtimeconfig.json Anda. Mengatur sakelar untuk true menginstruksikan host untuk menggunakan perilaku sebelumnya membaca grafik RID. Atau, Anda dapat mengatur UseRidGraph properti MSBuild ke true dalam file proyek Anda. Misalnya

<PropertyGroup>
  <UseRidGraph>true</UseRidGraph>
</PropertyGroup>

API yang Terpengaruh

Lihat juga