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:Derleme bağlayıcısı tarafından oluşturulan hata günlüklerini okumak için Fuslogvw.exe (Derleme Bağlama Günlük Görüntüleyicisi) çalıştırın.
Derlemenin istenen konumda olup olmadığını belirleyin. ve LoadFile yöntemleri söz konusu olduğunda LoadFrom istenen konum kolayca belirlenebilir. Derleme kimliğini kullanarak bağlanan yöntemi söz konusu olduğunda Load , uygulama etki alanının BaseDirectory özellik yoklama yolunda ve genel derleme önbelleğinde bu kimlikle eşleşen derlemeleri aramanız gerekir.
Ö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");
}
}
}