Aracılığıyla paylaş


bindingFailure MDA

Not

Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.

Yönetilen bindingFailure hata ayıklama yardımcısı (MDA), bir derleme yüklenemediğinde etkinleştirilir.

Belirtiler

Kod, statik başvuru veya veya Assembly.LoadFromgibi Assembly.Load yükleyici yöntemlerinden birini kullanarak bir derleme yüklemeyi denedi. Derleme yüklenmez ve veya FileNotFoundExceptionFileLoadException özel durumu oluşturulur.

Neden

Çalışma zamanı bir derlemeyi yükleyemediğinde bağlama hatası oluşur. Bağlama hatası aşağıdaki durumlardan birinin sonucu olabilir:

  • Ortak dil çalışma zamanı (CLR) istenen derlemeyi bulamıyor. Bunun, derlemenin yüklenmemesi veya uygulamanın derlemeyi bulmak için doğru yapılandırılmaması gibi birçok nedeni vardır.

  • Yaygın bir sorun senaryosu, clr'nin bu türü içeren derlemeyi diğer uygulama etki alanına yüklemesini gerektiren bir türü başka bir uygulama etki alanına geçirmektir. Diğer uygulama etki alanı özgün uygulama etki alanından farklı yapılandırıldıysa çalışma zamanının derlemeyi yüklemesi mümkün olmayabilir. Örneğin, iki uygulama etki alanı farklı BaseDirectory özellik değerlerine sahip olabilir.

  • İstenen derleme bozuk veya bir derleme değil.

  • Derlemeyi yüklemeye çalışan kod, derlemeleri yüklemek için doğru kod erişimi güvenlik izinlerine sahip değil.

  • Kullanıcı kimlik bilgileri, dosyayı okumak için gerekli izinleri sağlamaz.

Çözüm

İlk adım, CLR'nin neden istenen derlemeye bağlanamadığını belirlemektir. Çalışma zamanının istenen derlemeyi bulamamasının veya yükleyememesinin birçok nedeni vardır, örneğin Neden bölümünde listelenen senaryolar. Bağlama hatasının nedenini ortadan kaldırmak için aşağıdaki eylemler önerilir:

  • MDA tarafından bindingFailure sağlanan verileri kullanarak nedenini belirleyin:

  • Önceki belirlemeye göre nedeni çözün. Olası çözüm seçenekleri şunlardır:

    • İstenen derlemeyi genel derleme önbelleğine yükleyin ve öğesini çağırın. Load yöntemiyle derlemeyi kimliğe göre yükleyebilir.

    • İstenen derlemeyi uygulama dizinine kopyalayın ve kimliğe göre derlemeyi yüklemek için yöntemini çağırın Load .

    • Özelliği değiştirerek veya özel yoklama yolları ekleyerek bağlama hatasının derleme yolunu içermesi BaseDirectory için oluşan uygulama etki alanını yeniden yapılandırın.

    • Oturum açmış kullanıcının dosyayı okumasına izin vermek için dosyanın erişim denetim listesini değiştirin.

Çalışma Zamanı üzerindeki etkisi

Bu MDA'nın CLR üzerinde hiçbir etkisi yoktur. Yalnızca bağlama hataları hakkındaki verileri bildirir.

Çıktı

MDA, istenen yol ve/veya görünen ad, bağlama bağlamı, yükün istendiği uygulama etki alanı ve hatanın nedeni de dahil olmak üzere yüklenemeyen derlemeyi bildirir.

Bu veriler CLR için kullanılabilir değilse görünen ad veya istenen yol boş olabilir. Başarısız olan çağrı yöntemine Load yapıldıysa, büyük olasılıkla çalışma zamanı derlemenin görünen adını belirleyememiştir.

Yapılandırma

<mdaConfig>
  <assistants>
    <bindingFailure />
  </assistants>
</mdaConfig>

Örnek

Aşağıdaki kod örneği, bu MDA'yi etkinleştirebilen bir durumu gösterir:

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");
        }
    }
}

Ayrıca bkz.