Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Questo articolo è specifico per .NET Framework. Non si applica alle implementazioni più recenti di .NET, tra cui .NET 6 e versioni successive.
L'assistente bindingFailure al debug gestito viene attivato quando un assembly non viene caricato.
Symptoms
Il codice ha tentato di caricare un assembly usando un riferimento statico o uno dei metodi del caricatore, ad esempio Assembly.Load o Assembly.LoadFrom. L'assembly non viene caricato e viene generata un'eccezione FileNotFoundException o FileLoadException .
Motivo
Un errore di associazione si verifica quando il runtime non è in grado di caricare un assembly. Un errore di associazione potrebbe essere il risultato di una delle situazioni seguenti:
Common Language Runtime (CLR) non riesce a trovare l'assembly richiesto. Questo può verificarsi per molti motivi, ad esempio l'assembly non installato o l'applicazione non è configurata correttamente per trovare l'assembly.
Uno scenario di problema comune consiste nel passare un tipo a un altro dominio applicazione, che richiede a CLR di caricare l'assembly contenente tale tipo nell'altro dominio applicazione. Potrebbe non essere possibile che il runtime carichi l'assembly se l'altro dominio applicazione è configurato in modo diverso dal dominio applicazione originale. Ad esempio, i due domini applicazione potrebbero avere valori di proprietà diversi BaseDirectory .
L'assembly richiesto è danneggiato o non è un assembly.
Il codice che tenta di caricare l'assembly non dispone delle autorizzazioni di sicurezza di accesso al codice corrette per caricare gli assembly.
Le credenziali utente non forniscono le autorizzazioni necessarie per leggere il file.
Resolution
Il primo passaggio consiste nel determinare il motivo per cui CLR non è riuscito a eseguire l'associazione all'assembly richiesto. Esistono molti motivi per cui il runtime potrebbe non aver trovato o essere stato in grado di caricare l'assembly richiesto, ad esempio gli scenari elencati nella sezione Causa. Per eliminare la causa dell'errore di associazione, è consigliabile eseguire le azioni seguenti:
Determinare la causa usando i dati forniti dall'assistente al debug gestito
bindingFailure:Eseguire il Fuslogvw.exe (Visualizzatore log associazione assembly) per leggere i log degli errori generati dal gestore di associazione di assembly.
Determinare se l'assembly si trova nel percorso richiesto. Nel caso dei LoadFrom metodi e LoadFile , la posizione richiesta può essere facilmente determinata. Nel caso del Load metodo , che esegue l'associazione usando l'identità dell'assembly, è necessario cercare gli assembly che corrispondono a tale identità nel percorso probe delle proprietà del dominio applicazione BaseDirectory e nella Global Assembly Cache.
Risolvere la causa in base alla determinazione precedente. Le opzioni di risoluzione possibili sono le seguenti:
Installare l'assembly richiesto nella Global Assembly Cache e chiamare . Load metodo per caricare l'assembly in base all'identità.
Copiare l'assembly richiesto nella directory dell'applicazione e chiamare il Load metodo per caricare l'assembly in base all'identità.
Riconfigurare il dominio applicazione in cui si è verificato l'errore di associazione per includere il percorso dell'assembly modificando la BaseDirectory proprietà o aggiungendo percorsi di probe privati.
Modificare l'elenco di controllo di accesso per il file per consentire all'utente connesso di leggere il file.
Effetto sul runtime
Questo assistente al debug gestito non ha alcun effetto su CLR. Segnala solo i dati relativi agli errori di binding.
Risultato
MdA segnala l'assembly che non è stato caricato, incluso il percorso richiesto e/o il nome visualizzato, il contesto di associazione, il dominio dell'applicazione in cui è stato richiesto il caricamento e il motivo dell'errore.
Il nome visualizzato o il percorso richiesto può essere vuoto se tali dati non erano disponibili per CLR. Se la chiamata non è riuscita al Load metodo , è probabile che il runtime non sia riuscito a determinare il nome visualizzato per l'assembly.
Configurazione
<mdaConfig>
<assistants>
<bindingFailure />
</assistants>
</mdaConfig>
Esempio
L'esempio di codice seguente illustra una situazione in grado di attivare questo assistente al debug gestito:
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");
}
}
}