Pemeriksaan default
AssemblyLoadContext.Default Instans bertanggung jawab untuk menemukan dependensi perakitan. Artikel ini menjelaskan logika pemeriksaan instans AssemblyLoadContext.Default .
Properti pemeriksaan yang dikonfigurasi host
Saat runtime dimulai, host runtime menyediakan sekumpulan properti pemeriksaan bernama yang mengonfigurasi AssemblyLoadContext.Default jalur pemeriksaan.
Setiap properti pemeriksaan 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 | Deskripsi |
---|---|
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 terkelola. |
Bagaimana properti diisi?
Ada dua skenario utama untuk mengisi properti tergantung pada apakah <file myapp>.deps.json ada.
- Saat file *.deps.json ada, file diurai untuk mengisi properti pemeriksaan.
- Ketika file *.deps.json tidak ada, direktori aplikasi diasumsikan berisi semua dependensi. Konten direktori digunakan untuk mengisi properti pemeriksaan.
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.
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 pemeriksaan dari kode terkelola?
Setiap properti tersedia dengan memanggil AppContext.GetData(String) fungsi dengan nama properti dari tabel di atas.
Bagaimana cara men-debug konstruksi properti pemeriksaan?
Host runtime .NET Core akan menghasilkan pesan pelacakan yang berguna ketika variabel lingkungan tertentu diaktifkan:
Variabel lingkungan | Deskripsi |
---|---|
COREHOST_TRACE=1 |
Mengaktifkan pelacakan. |
COREHOST_TRACEFILE=<path> |
Melacak ke jalur file alih-alih default stderr . |
COREHOST_TRACE_VERBOSITY |
Mengatur verbositas dari 1 (terendah) ke 4 (tertinggi). |
Pemeriksaan default rakitan terkelola
Saat menyelidiki untuk menemukan rakitan terkelola, AssemblyLoadContext.Default tampilan dalam urutan:
- File yang cocok dengan AssemblyName.Name di
TRUSTED_PLATFORM_ASSEMBLIES
(setelah menghapus ekstensi file). - File rakitan dengan
APP_PATHS
ekstensi file umum.
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.
Pemeriksaan pustaka tidak terkelola (asli)
Algoritma pemeriksaan pustaka runtime yang tidak dikelola identik di semua platform. Namun, karena beban aktual pustaka yang tidak dikelola dilakukan oleh platform yang mendasar, perilaku yang diamati bisa 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 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 jalur relatif, setiap kombinasi, kemudian digunakan dalam langkah-langkah berikut. Upaya pemuatan pertama yang berhasil segera mengembalikan handel ke pustaka yang dimuat.
Tambahkan ke setiap jalur yang
NATIVE_DLL_SEARCH_DIRECTORIES
disediakan dalam properti dan coba muat.Jika DefaultDllImportSearchPathsAttribute tidak didefinisikan pada rakitan panggilan atau p/panggil atau didefinisikan dan termasuk
DllImportSearchPath.AssemblyDirectory
, tambahkan nama atau kombinasi ke direktori perakitan panggilan dan coba muat.Gunakan secara langsung untuk memuat pustaka.
Menunjukkan bahwa pustaka gagal dimuat.
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