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:
- Baca grafik RID dari file .deps.json kerangka kerja akar (Microsoft.NetCore.App).
- 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).
- Mulai dari entri yang ditemukan dalam grafik RID, cari aset yang cocok dengan RID tersebut.
- 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.
Tindakan yang direkomendasikan
Gunakan RID portabel, misalnya, , linux
, linux-musl
osx
, 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>