Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.
Der bindingFailure verwaltete Debugging-Assistent (Managed Debugging Assistant, MDA) wird aktiviert, wenn eine Assembly nicht geladen werden kann.
Symptome
Code hat versucht, eine Assembly mithilfe eines statischen Verweises oder einer der Lademethoden zu laden, z Assembly.Load . B. oder Assembly.LoadFrom. Die Assembly wird nicht geladen, und eine FileNotFoundException Ausnahme FileLoadException wird ausgelöst.
Ursache
Ein Bindungsfehler tritt auf, wenn die Laufzeit keine Assembly laden kann. Ein Bindungsfehler kann das Ergebnis einer der folgenden Situationen sein:
Die Common Language Runtime (CLR) kann die angeforderte Assembly nicht finden. Dies kann viele Gründe haben, z. B. die nicht installierte Assembly oder die Anwendung, die nicht ordnungsgemäß konfiguriert ist, um die Assembly zu finden.
Ein häufiges Problemszenario besteht darin, einen Typ an eine andere Anwendungsdomäne zu übergeben, was erfordert, dass die CLR die Assembly laden muss, die diesen Typ in der anderen Anwendungsdomäne enthält. Es ist möglicherweise nicht möglich, dass die Laufzeit die Assembly lädt, wenn die andere Anwendungsdomäne anders als die ursprüngliche Anwendungsdomäne konfiguriert ist. Beispielsweise können die beiden Anwendungsdomänen unterschiedliche BaseDirectory Eigenschaftswerte aufweisen.
Die angeforderte Assembly ist beschädigt oder ist keine Assembly.
Der Code, der versucht, die Assembly zu laden, verfügt nicht über die richtigen Codezugriffsberechtigungen zum Laden von Assemblys.
Die Benutzeranmeldeinformationen geben nicht die erforderlichen Berechtigungen zum Lesen der Datei an.
Resolution
Der erste Schritt besteht darin, zu bestimmen, warum die CLR nicht an die angeforderte Assembly gebunden werden konnte. Es gibt viele Gründe, warum die Laufzeit die angeforderte Assembly möglicherweise nicht gefunden oder geladen hat, z. B. die im Abschnitt "Ursache" aufgeführten Szenarien. Die folgenden Aktionen werden empfohlen, um die Ursache des Bindungsfehlers zu beseitigen:
Ermitteln Sie die Ursache mithilfe der vom
bindingFailureMDA bereitgestellten Daten:Führen Sie den Fuslogvw.exe (Assembly Binding Log Viewer) aus, um die vom Assemblyordner erzeugten Fehlerprotokolle zu lesen.
Ermitteln Sie, ob sich die Assembly an dem angeforderten Speicherort befindet. Im Falle der LoadFrom Und LoadFile Methoden kann der angeforderte Standort leicht bestimmt werden. Bei der Load Methode, die mithilfe der Assemblyidentität gebunden wird, müssen Sie nach Assemblys suchen, die dieser Identität im Eigenschaftentestpfad der Anwendungsdomäne BaseDirectory und im globalen Assemblycache entsprechen.
Lösen Sie die Ursache basierend auf der vorherigen Bestimmung auf. Mögliche Lösungsoptionen sind die folgenden:
Installieren Sie die angeforderte Assembly im globalen Assemblycache, und rufen Sie die auf. Load -Methode, um die Assembly nach Identität zu laden.
Kopieren Sie die angeforderte Assembly in das Anwendungsverzeichnis, und rufen Sie die Load Methode auf, um die Assembly nach Identität zu laden.
Konfigurieren Sie die Anwendungsdomäne neu, in der der Bindungsfehler aufgetreten ist, um den Assemblypfad einzuschließen, indem Sie entweder die BaseDirectory Eigenschaft ändern oder private Pfade hinzufügen.
Ändern Sie die Zugriffssteuerungsliste für die Datei, damit der angemeldete Benutzer die Datei lesen kann.
Effekt auf die Laufzeit
Diese MDA hat keine Auswirkungen auf die CLR. Es werden nur Daten zu Bindungsfehlern gemeldet.
Output
Die MDA meldet die Assembly, die nicht geladen werden konnte, einschließlich des angeforderten Pfads und/oder des Anzeigenamens, des Bindungskontexts, der Anwendungsdomäne, in der die Last angefordert wurde, und den Grund für den Fehler.
Der Anzeigename oder der angeforderte Pfad ist möglicherweise leer, wenn diese Daten für die CLR nicht verfügbar waren. Wenn der Fehler bei der Load Methode aufgetreten ist, konnte die Laufzeit wahrscheinlich nicht den Anzeigenamen für die Assembly ermitteln.
Konfiguration
<mdaConfig>
<assistants>
<bindingFailure />
</assistants>
</mdaConfig>
Beispiel
Im folgenden Codebeispiel wird eine Situation veranschaulicht, in der diese MDA aktiviert werden kann:
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");
}
}
}