Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Instans AssemblyLoadContext.Default bertanggung jawab untuk menemukan ketergantungan pada perakitan. Artikel ini menjelaskan logika pemeriksaan instans AssemblyLoadContext.Default .
Properti pengawasan yang dikonfigurasi oleh host
Pada saat runtime dimulai, host runtime menyediakan sekumpulan properti pengujian bernama yang mengonfigurasi jalur pengujian AssemblyLoadContext.Default.
Setiap properti pengujian bersifat opsional. Jika ada, setiap properti adalah nilai string yang berisi daftar jalur absolut yang dibatasi. Pembatasnya adalah ';' pada Windows dan ':' di semua platform lainnya.
| Nama Properti | Description |
|---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Daftar jalur file perakitan platform dan aplikasi. |
PLATFORM_RESOURCE_ROOTS |
Daftar jalur direktori untuk mencari rakitan sumber daya satelit. |
NATIVE_DLL_SEARCH_DIRECTORIES |
Daftar jalur direktori untuk mencari pustaka yang tidak dikelola (asli). |
APP_PATHS |
Daftar jalur direktori untuk mencari rakitan perangkat lunak yang dikelola. |
Bagaimana properti terisi?
Ada dua skenario utama untuk mengisi properti tergantung pada apakah <file myapp>.deps.json ada.
- Saat file *.deps.json ada, file tersebut diparsing untuk mengisi properti probing.
- Ketika file *.deps.json tidak ada, direktori aplikasi diasumsikan berisi semua dependensi. Isi direktori digunakan untuk mengisi properti pendeteksian.
Selain itu, file *.deps.json untuk kerangka kerja yang direferensikan juga diurai.
Variabel DOTNET_ADDITIONAL_DEPS lingkungan dapat digunakan untuk menambahkan dependensi tambahan.
dotnet.exe juga berisi parameter opsional --additional-deps untuk mengatur nilai ini pada startup aplikasi.
Nota
Variabel DOTNET_ADDITIONAL_DEPS lingkungan dan --additional-deps opsi baris perintah hanya berlaku untuk aplikasi yang bergantung pada kerangka kerja.
Opsi ini diabaikan untuk aplikasi mandiri.
Untuk informasi selengkapnya, lihat Penyebaran yang bergantung pada kerangka kerja vs mandiri.
Properti APP_PATHS tidak diisi secara default dan dihilangkan untuk sebagian besar aplikasi.
Daftar semua file *.deps.json yang digunakan oleh aplikasi dapat diakses melalui System.AppContext.GetData("APP_CONTEXT_DEPS_FILES").
Bagaimana cara melihat properti probing dari kode terkelola?
Setiap properti tersedia dengan memanggil AppContext.GetData(String) fungsi dengan nama properti dari tabel di atas.
Bagaimana cara melacak kesalahan dalam pembuatan properti pemeriksaan?
Host runtime .NET Core akan menghasilkan pesan pelacakan yang berguna ketika variabel lingkungan tertentu diaktifkan:
| Variabel lingkungan | Description |
|---|---|
DOTNET_HOST_TRACE=1 |
Memungkinkan pelacakan. |
DOTNET_HOST_TRACEFILE=<path> |
Melacak ke jalur file alih-alih default stderr. |
DOTNET_HOST_TRACE_VERBOSITY |
Mengatur verbositas dari 1 (terendah) ke 4 (tertinggi). |
Untuk informasi selengkapnya, lihat DOTNET_HOST_TRACE variabel lingkungan.
Pemeriksaan default rakitan terkelola
Saat menyelidiki untuk menemukan rakitan terkelola, AssemblyLoadContext.Default melihat dalam urutan:
- File yang cocok dengan AssemblyName.Name di
TRUSTED_PLATFORM_ASSEMBLIES(setelah menghapus ekstensi file). - Berkas-berkas yang disusun di
APP_PATHSmemiliki ekstensi file umum.
Saat memuat AssemblyLoadContext secara default, rakitan yang ditemukan di TRUSTED_PLATFORM_ASSEMBLIES atau APP_PATHS akan diutamakan daripada jalur tertentu atau objek rakitan mentah. Misalnya, jika Anda memanggil AssemblyLoadContext.LoadFromStream atau AssemblyLoadContext.LoadFromAssemblyPath pada AssemblyLoadContext default dan ada rakitan dengan nama yang cocok di TRUSTED_PLATFORM_ASSEMBLIES atau APP_PATHS, runtime memuat rakitan dari lokasi tersebut, bukan dari aliran atau jalur APP_PATHS yang ditentukan.
Pemeriksaan rakitan satelit (sumber daya)
Untuk menemukan rakitan satelit untuk budaya tertentu, buat serangkaian jalur file.
Untuk setiap jalur dalam PLATFORM_RESOURCE_ROOTS dan kemudian APP_PATHS, tambahkan CultureInfo.Name string, pemisah direktori, AssemblyName.Name string, dan ekstensi '.dll'.
Jika ada file yang cocok, coba muat dan kembalikan.
Pengecekan pustaka bawaan yang tidak terkelola
Algoritma penelusuran pustaka yang tidak dikelola dari runtime sama di semua platform. Namun, karena pemuatan sebenarnya pustaka yang tidak dikelola dilakukan oleh platform yang mendasari, perilaku yang diamati mungkin sedikit berbeda.
Periksa apakah nama pustaka yang disediakan mewakili jalur absolut atau relatif.
Jika nama mewakili jalur absolut, gunakan nama secara langsung untuk semua operasi berikutnya. Jika tidak, gunakan nama dan buat kombinasi yang ditentukan oleh platform untuk dipertimbangkan. Kombinasi terdiri dari awalan spesifik platform (misalnya,
lib) dan/atau akhiran (misalnya, ,.dll.dylib, dan.so). Ini bukan daftar lengkap, dan tidak mewakili upaya yang tepat yang dilakukan pada setiap platform. Ini hanya contoh dari apa yang dipertimbangkan. Untuk informasi selengkapnya, lihat pemuatan pustaka asli.Nama dan, jika jalurnya relatif, setiap kombinasi tersebut digunakan dalam langkah-langkah berikut. Upaya pemuatan pertama yang berhasil akan langsung mengembalikan pegangan ke perpustakaan yang telah dimuat.
Tambahkan ke setiap jalur yang diberikan dalam properti
NATIVE_DLL_SEARCH_DIRECTORIESdan coba untuk memuat.Jika DefaultDllImportSearchPathsAttribute tidak didefinisikan pada assembly pemanggil atau p/invoke atau didefinisikan dan termasuk
DllImportSearchPath.AssemblyDirectory, tambahkan nama atau kombinasi tersebut ke direktori assembly pemanggil dan coba lakukan pemuatan.Gunakan secara langsung untuk memuat pustaka.
Menunjukkan bahwa pustaka gagal dimuat.