Kelas System.Runtime.Loader.AssemblyLoadContext
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
AssemblyLoadContext mewakili konteks beban. Secara konseptual, konteks beban membuat cakupan untuk memuat, menyelesaikan, dan berpotensi membongkar sekumpulan rakitan.
Yang AssemblyLoadContext ada terutama untuk menyediakan isolasi pemuatan perakitan. Ini memungkinkan beberapa versi rakitan yang sama dimuat dalam satu proses. Ini menggantikan mekanisme isolasi yang disediakan oleh beberapa AppDomain instans dalam .NET Framework.
Catatan
- AssemblyLoadContext tidak menyediakan fitur keamanan apa pun. Semua kode memiliki izin penuh dari proses.
- Hanya di .NET Core 2.0 - 2.2, AssemblyLoadContext adalah kelas abstrak. Untuk membuat kelas konkret dalam versi ini, terapkan AssemblyLoadContext.Load(AssemblyName) metode .
Penggunaan dalam runtime
Runtime mengimplementasikan dua konteks beban rakitan:
- AssemblyLoadContext.Default mewakili konteks default runtime, yang digunakan untuk rakitan utama aplikasi dan dependensi statisnya.
- Metode Assembly.LoadFile(String) ini mengisolasi rakitan yang dimuatnya dengan membuat instans yang paling mendasar AssemblyLoadContext. Ini memiliki skema isolasi sederhana yang memuat setiap rakitan sendiri AssemblyLoadContext tanpa resolusi dependensi.
Penggunaan aplikasi
Aplikasi dapat membuat sendiri AssemblyLoadContext untuk membuat solusi kustom untuk skenario tingkat lanjut. Penyesuaian berfokus pada menentukan mekanisme resolusi dependensi.
menyediakan AssemblyLoadContext dua titik ekstensi untuk menerapkan resolusi rakitan terkelola:
- Metode ini AssemblyLoadContext.Load(AssemblyName) memberikan kesempatan pertama untuk AssemblyLoadContext menyelesaikan, memuat, dan mengembalikan perakitan. AssemblyLoadContext.Load(AssemblyName) Jika metode mengembalikan
null
, loader mencoba memuat rakitan ke AssemblyLoadContext.Defaultdalam . - AssemblyLoadContext.Default Jika tidak dapat menyelesaikan assembly, assembly asli AssemblyLoadContext mendapatkan kesempatan kedua untuk menyelesaikan assembly. Runtime meningkatkan Resolving peristiwa.
Selain itu, AssemblyLoadContext.LoadUnmanagedDll(String) metode virtual memungkinkan penyesuaian resolusi rakitan default yang tidak dikelola. Implementasi default mengembalikan null
, yang menyebabkan pencarian runtime menggunakan kebijakan pencarian defaultnya. Kebijakan pencarian default cukup untuk sebagian besar skenario.
Tantangan teknis
Tidak dimungkinkan untuk memuat beberapa versi runtime dalam satu proses.
Perhatian
Memuat beberapa salinan atau versi rakitan kerangka kerja yang berbeda dapat menyebabkan perilaku yang tidak terduga dan sulit didiagnosis.
Tip
Gunakan batas proses dengan komunikasi jarak jauh atau antarproses untuk menyelesaikan masalah isolasi ini.
Waktu pemuatan perakitan dapat menyulitkan pengujian dan penelusuran kesalahan. Rakitan biasanya dimuat tanpa dependensinya segera diselesaikan. Dependensi dimuat sesuai kebutuhan:
- Ketika kode bercabang ke dalam rakitan dependen.
- Saat kode memuat sumber daya.
- Ketika kode secara eksplisit memuat rakitan.
Implementasi AssemblyLoadContext.Load(AssemblyName) dapat menambahkan dependensi baru yang mungkin perlu diisolasi untuk memungkinkan versi yang berbeda ada. Implementasi yang paling alami akan menempatkan dependensi ini dalam konteks default. Desain yang cermat dapat mengisolasi dependensi baru.
Rakitan yang sama dimuat beberapa kali ke dalam konteks yang berbeda.
- Ini dapat menyebabkan pesan kesalahan yang membingungkan, misalnya "Tidak dapat melemparkan objek jenis 'Sample.Plugin' untuk mengetik 'Sample.Plugin'".
- Marshal di seluruh batas isolasi tidak sepele. Solusi umumnya adalah menggunakan antarmuka yang ditentukan dalam rakitan yang hanya dimuat ke dalam konteks beban default.
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