Bagikan melalui


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.

  1. Periksa apakah nama pustaka yang disediakan mewakili jalur absolut atau relatif.

  2. 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.

  3. 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.

  4. Menunjukkan bahwa pustaka gagal dimuat.