AssemblyLoadContext Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mewakili konsep runtime cakupan untuk pemuatan perakitan.
public ref class AssemblyLoadContext
public ref class AssemblyLoadContext abstract
public class AssemblyLoadContext
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public Class AssemblyLoadContext
Public MustInherit Class AssemblyLoadContext
- Warisan
-
AssemblyLoadContext
Keterangan
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.
Note
- AssemblyLoadContext tidak menyediakan fitur keamanan apa pun. Semua kode memiliki izin penuh terhadap 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 assemblies yang dimuatnya dengan menginstansiasi yang paling dasar AssemblyLoadContext. Ini memiliki skema isolasi sederhana yang memuat setiap komponen dalam AssemblyLoadContext sendiri tanpa menyelesaikan dependensi.
Penggunaan aplikasi
Aplikasi dapat membuat sendiri AssemblyLoadContext untuk membuat solusi kustom untuk skenario tingkat lanjut. Penyesuaian berfokus pada menentukan mekanisme resolusi dependensi.
AssemblyLoadContext menyediakan dua titik ekstensi untuk menerapkan resolusi penyusunan terkelola.
- Metode AssemblyLoadContext.Load(AssemblyName) memberikan kesempatan pertama bagi AssemblyLoadContext untuk menyelesaikan, memuat, dan mengembalikan assembly. Jika metode AssemblyLoadContext.Load(AssemblyName) mengembalikan
null, loader mencoba memuat rakitan ke dalam AssemblyLoadContext.Default. - Jika AssemblyLoadContext.Default tidak dapat menyelesaikan assembly, maka AssemblyLoadContext yang asli 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 debugging. Assembly biasanya dimuat tanpa dependensinya langsung diselesaikan. Dependensi dimuat sesuai kebutuhan:
- Ketika kode bercabang ke dalam rakitan dependen.
- Saat kode memuat sumber daya.
- Ketika kode secara eksplisit memuat assembly.
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'".
- Mengorganisir melewati batas isolasi adalah tugas yang tidak sederhana. Solusi umumnya adalah menggunakan antarmuka yang ditentukan dalam rakitan yang hanya dimuat ke dalam konteks beban default.
Konstruktor
| Nama | Deskripsi |
|---|---|
| AssemblyLoadContext() |
Menginisialisasi instans baru dari kelas AssemblyLoadContext. |
| AssemblyLoadContext(Boolean) |
Menginisialisasi instans AssemblyLoadContext baru kelas dengan nilai yang menunjukkan apakah pembongkaran diaktifkan. |
| AssemblyLoadContext(String, Boolean) |
Menginisialisasi instans AssemblyLoadContext baru kelas dengan nama dan nilai yang menunjukkan apakah pembongkaran diaktifkan. |
Properti
| Nama | Deskripsi |
|---|---|
| All |
Mengembalikan kumpulan semua AssemblyLoadContext instans. |
| Assemblies |
Mengembalikan koleksi instans yang Assembly dimuat di AssemblyLoadContext. |
| CurrentContextualReflectionContext |
AssemblyLoadContext Mendapatkan yang ditetapkan oleh panggilan terbaru ke EnterContextualReflection(). |
| Default |
Mendapatkan default AssemblyLoadContext. Konteks default berisi rakitan aplikasi utama dan dependensi statisnya. |
| IsCollectible |
Mendapatkan nilai yang menunjukkan apakah ini AssemblyLoadContext dapat dikumpulkan. |
| Name |
Dapatkan nama AssemblyLoadContext. |
Metode
| Nama | Deskripsi |
|---|---|
| EnterContextualReflection() |
Atur CurrentContextualReflectionContext ke |
| EnterContextualReflection(Assembly) |
CurrentContextualReflectionContext Mengatur ke AssemblyLoadContext yang memuat rakitan. |
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
| Finalize() |
Memungkinkan objek untuk mencoba membebaskan sumber daya dan melakukan operasi pembersihan lainnya sebelum direklamasi kembali oleh pengumpulan sampah. |
| GetAssemblyName(String) |
AssemblyName Mendapatkan untuk jalur perakitan. |
| GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
| GetLoadContext(Assembly) |
AssemblyLoadContext Mendapatkan yang berisi yang ditentukan Assembly. |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| Load(AssemblyName) |
Ketika ditimpa dalam kelas turunan, memungkinkan perakitan diselesaikan berdasarkan AssemblyName. |
| LoadFromAssemblyName(AssemblyName) |
Menyelesaikan dan memuat rakitan yang diberikan AssemblyName. |
| LoadFromAssemblyPath(String) |
Memuat konten file rakitan pada jalur yang ditentukan. |
| LoadFromNativeImagePath(String, String) |
Memuat konten gambar asli file rakitan terkelola pada jalur yang ditentukan. |
| LoadFromStream(Stream, Stream) |
Memuat rakitan dengan gambar berbasis format file objek umum (COFF) yang berisi rakitan terkelola, secara opsional termasuk simbol untuk rakitan. |
| LoadFromStream(Stream) |
Memuat rakitan dengan gambar berbasis format file objek umum (COFF) yang berisi rakitan terkelola. |
| LoadUnmanagedDll(String) |
Memungkinkan kelas turunan memuat pustaka yang tidak dikelola berdasarkan nama. |
| LoadUnmanagedDllFromPath(String) |
Memuat pustaka yang tidak dikelola dari jalur yang ditentukan. |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| SetProfileOptimizationRoot(String) |
Mengatur jalur akar tempat profil pengoptimalan untuk konteks beban ini disimpan. |
| StartProfileOptimization(String) |
Memulai pengoptimalan profil untuk profil yang ditentukan. |
| ToString() |
Mengembalikan representasi string dari konteks beban ini. |
| ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
| Unload() |
Memulai bongkar ini AssemblyLoadContext. |
Acara
| Nama | Deskripsi |
|---|---|
| Resolving |
Terjadi ketika resolusi rakitan gagal saat mencoba memuat ke dalam konteks beban rakitan ini. |
| ResolvingUnmanagedDll |
Terjadi ketika resolusi pustaka asli gagal. |
| Unloading |
Terjadi ketika dibongkar AssemblyLoadContext . |