Algoritma pemuatan rakitan satelit
Rakitan satelit digunakan untuk menyimpan sumber daya yang dilokalkan yang disesuaikan untuk bahasa dan budaya.
Rakitan satelit menggunakan algoritma pemuatan yang berbeda dari rakitan yang dikelola umum.
Kapan rakitan satelit dimuat?
Rakitan satelit dimuat saat memuat sumber daya yang dilokalkan.
API dasar untuk memuat sumber daya yang dilokalkan adalah System.Resources.ResourceManager kelas . ResourceManager Pada akhirnya kelas akan memanggil GetSatelliteAssembly metode untuk setiap CultureInfo.Name.
API tingkat yang lebih tinggi dapat mengabstraksi API tingkat rendah.
Algoritma
Proses fallback sumber daya .NET Core melibatkan langkah-langkah berikut:
Tentukan
active
AssemblyLoadContext instans. Dalam semua kasus,active
instans adalah assembly AssemblyLoadContextyang mengeksekusi .active
Instans memuat rakitan satelit untuk budaya yang diminta dalam urutan prioritas berikut:Periksa cache-nya.
Jika
active
adalah AssemblyLoadContext.Default instans, jalankan logika pemeriksaan satelit (sumber daya) default.Memanggil fungsi AssemblyLoadContext.Load.
Jika rakitan terkelola yang sesuai dengan rakitan satelit dimuat dari file, periksa direktori rakitan terkelola untuk subdirektori yang cocok dengan yang diminta CultureInfo.Name (misalnya,
es-MX
).Catatan
Di Linux dan macOS, subdirektori peka huruf besar/kecil dan harus:
- Kasus yang sama persis.
- Berada dalam huruf kecil.
Naikkan AssemblyLoadContext.Resolving acara.
Naikkan AppDomain.AssemblyResolve acara.
Jika rakitan satelit dimuat:
- Acara AppDomain.AssemblyLoad dinaikkan.
- Rakitan dicari untuk sumber daya yang diminta. Jika runtime menemukan sumber daya di assembly, runtime tersebut akan menggunakannya. Jika tidak menemukan sumber daya, sumber daya akan melanjutkan pencarian.
Catatan
Untuk menemukan sumber daya dalam rakitan satelit, runtime mencari file sumber daya yang ResourceManager diminta oleh untuk saat ini CultureInfo.Name. Dalam file sumber daya, file tersebut mencari nama sumber daya yang diminta. Jika keduanya tidak ditemukan, sumber daya diperlakukan sebagai tidak ditemukan.
Selanjutnya ResourceManager mencari rakitan budaya induk melalui banyak tingkat potensial, setiap kali mengulangi langkah 2 & 3.
Setiap budaya hanya memiliki satu induk, yang didefinisikan oleh CultureInfo.Parent properti .
Pencarian budaya induk berhenti ketika properti budaya Parent adalah CultureInfo.InvariantCulture.
InvariantCultureUntuk , kami tidak kembali ke langkah 2 & 3, melainkan melanjutkan dengan langkah 5.
Jika sumber daya masih belum ditemukan, ResourceManager sumber daya akan digunakan untuk budaya default (fallback).
Biasanya, sumber daya untuk budaya default disertakan dalam perakitan aplikasi utama. Namun, Anda dapat menentukan UltimateResourceFallbackLocation.Satellite untuk NeutralResourcesLanguageAttribute.Location properti . Nilai ini menunjukkan bahwa lokasi fallback utama untuk sumber daya adalah rakitan satelit daripada perakitan utama.
Catatan
Budaya default adalah fallback utama. Oleh karena itu, kami sarankan Anda selalu menyertakan sekumpulan sumber daya lengkap dalam file sumber daya default. Ini membantu mencegah pengecualian dilemparkan. Dengan memiliki set lengkap, Anda menyediakan fallback untuk semua sumber daya dan memastikan bahwa setidaknya satu sumber daya selalu ada untuk pengguna, bahkan jika tidak spesifik secara budaya.
Akhirnya
- Jika runtime tidak menemukan file sumber daya untuk budaya default (fallback), pengecualian MissingManifestResourceException atau MissingSatelliteAssemblyException akan dilemparkan.
- Jika file sumber daya ditemukan tetapi sumber daya yang diminta tidak ada, permintaan mengembalikan
null
.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk