Algoritma pemuatan perakitan terkelola
Rakitan terkelola terletak dan dimuat dengan algoritma yang memiliki berbagai tahapan.
Semua rakitan terkelola kecuali rakitan dan WinRT
rakitan satelit menggunakan algoritma yang sama.
Kapan rakitan terkelola dimuat?
Mekanisme paling umum untuk memicu beban rakitan terkelola adalah referensi perakitan statis. Referensi ini disisipkan oleh pengkompilasi setiap kali kode menggunakan jenis yang ditentukan dalam rakitan lain. Rakitan ini dimuat (load-by-name
) sesuai kebutuhan oleh runtime. Waktu yang tepat ketika referensi rakitan statis dimuat tidak ditentukan. Ini dapat bervariasi di antara versi runtime dan dipengaruhi oleh pengoptimalan seperti inlining.
Penggunaan langsung API berikut juga akan memicu beban:
Algoritma
Algoritma berikut menjelaskan bagaimana runtime memuat rakitan terkelola.
Tentukan
active
AssemblyLoadContext.- Untuk referensi rakitan statis,
active
AssemblyLoadContext adalah instans yang memuat perakitan yang merujuk. - API pilihan membuat eksplisit
active
AssemblyLoadContext . - API lain menyimpulkan
active
AssemblyLoadContext. Untuk API ini, AssemblyLoadContext.CurrentContextualReflectionContext properti digunakan. Jika nilainya adalahnull
, maka instans yang disimpulkan AssemblyLoadContext digunakan. - Lihat tabel di bagian Kapan rakitan terkelola dimuat?
- Untuk referensi rakitan statis,
Load-by-name
Untuk metode ,active
AssemblyLoadContext memuat rakitan dalam urutan prioritas berikut:cache-by-name
Periksa .- Memanggil fungsi AssemblyLoadContext.Load.
- AssemblyLoadContext.Default Periksa cache instans dan jalankan logika pemeriksaan default rakitan terkelola. Jika rakitan baru dimuat, referensi ditambahkan ke AssemblyLoadContext.Default instans
cache-by-name
. - AssemblyLoadContext.Resolving Naikkan peristiwa untuk AssemblyLoadContext aktif.
- Naikkan AppDomain.AssemblyResolve acara.
Untuk jenis beban lainnya,
active
AssemblyLoadContext memuat rakitan dalam urutan prioritas berikut:cache-by-name
Periksa .- Muat dari jalur yang ditentukan atau objek perakitan mentah. Jika rakitan baru dimuat, referensi ditambahkan ke
active
AssemblyLoadContext instanscache-by-name
.
Dalam kedua kasus, jika rakitan baru dimuat, maka AppDomain.AssemblyLoad peristiwa akan dinaikkan.