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.
Catatan
Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.
Asisten penelusuran kesalahan terkelola (MDA) bindingFailure diaktifkan saat perakitan gagal dimuat.
Gejala
Kode telah mencoba memuat rakitan menggunakan referensi statis atau salah satu metode pemuat, seperti Assembly.Load atau Assembly.LoadFrom. Rakitan tidak dimuat dan pengecualian FileNotFoundException atau FileLoadException dilemparkan.
Penyebab
Kegagalan pengikatan terjadi ketika runtime tidak dapat memuat rakitan. Kegagalan pengikatan mungkin disebabkan oleh salah satu situasi berikut:
Runtime bahasa umum (CLR) tidak dapat menemukan rakitan yang diminta. Ada banyak alasan hal ini dapat terjadi, seperti perakitan tidak diinstal atau aplikasi tidak dikonfigurasi dengan benar untuk menemukan perakitan.
Skenario masalah yang umum adalah meneruskan jenis ke domain aplikasi lain, yang mengharuskan CLR memuat rakitan yang berisi jenis itu di domain aplikasi lain. Mungkin tidak mungkin runtime memuat rakitan jika domain aplikasi lain dikonfigurasi secara berbeda dari domain aplikasi asli. Misalnya, dua domain aplikasi mungkin memiliki nilai properti BaseDirectory yang berbeda.
Rakitan yang diminta rusak atau bukan rakitan.
Kode yang mencoba memuat rakitan tidak memiliki izin keamanan akses kode yang benar untuk memuat rakitan.
Kredensial pengguna tidak memberikan izin yang diperlukan untuk membaca file.
Resolusi
Langkah pertama adalah menentukan alasan CLR tidak dapat mengikat ke rakitan yang diminta. Ada banyak alasan mengapa waktu proses mungkin tidak ditemukan atau tidak dapat memuat rakitan yang diminta, seperti skenario yang tercantum di bagian Penyebab. Tindakan berikut direkomendasikan untuk menghilangkan penyebab kegagalan pengikatan:
Tentukan penyebabnya dengan menggunakan data yang disediakan oleh
bindingFailureMDA:Jalankan Fuslogvw.exe (Penampil Log Pengikatan Perakitan) untuk membaca log kesalahan yang dihasilkan oleh pengikat rakitan.
Tentukan apakah perakitan berada di lokasi yang diminta. Dalam hal metode LoadFrom dan LoadFile, lokasi yang diminta dapat dengan mudah ditentukan. Dalam kasus metode Load, yang mengikat menggunakan identitas rakitan, Anda harus mencari rakitan yang cocok dengan identitas itu di jalur penyelidikan properti BaseDirectory domain aplikasi dan cache rakitan global.
Selesaikan penyebabnya berdasarkan penentuan sebelumnya. Opsi resolusi yang memungkinkan adalah sebagai berikut:
Instal rakitan yang diminta di cache rakitan global dan panggil. Metode Load untuk memuat rakitan berdasarkan identitas.
Salin rakitan yang diminta ke dalam direktori aplikasi dan panggil metode Load untuk memuat rakitan berdasarkan identitas.
Konfigurasi ulang domain aplikasi tempat terjadi kegagalan pengikatan untuk menyertakan jalur perakitan dengan mengubah properti BaseDirectory atau menambahkan jalur penyelidikan pribadi.
Ubah daftar kontrol akses untuk file agar pengguna yang masuk dapat membaca file.
Efek pada Runtime
MDA ini tidak berpengaruh pada runtime bahasa umum. MDA hanya melaporkan data tentang kegagalan pengikatan.
Output
MDA melaporkan rakitan yang gagal memuat, termasuk jalur yang diminta dan/atau nama tampilan, konteks pengikatan, domain aplikasi tempat pemuatan diminta, dan alasan kegagalan.
Nama tampilan atau jalur yang diminta mungkin kosong jika data tersebut tidak tersedia untuk CLR. Jika panggilan yang gagal adalah ke metode Load, kemungkinan runtime tidak dapat menentukan nama tampilan untuk rakitan.
Konfigurasi
<mdaConfig>
<assistants>
<bindingFailure />
</assistants>
</mdaConfig>
Contoh
Contoh kode berikut menunjukkan situasi yang dapat mengaktifkan MDA ini:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// This call attempts to load a nonexistent assembly.
// The call will throw a System.IO.FileNotFound exception
// and cause the activation of the bindingFailure MDA
// if it is registered.
Assembly.Load("NonExistentAssembly");
}
}
}