In che ordine vengono cercate le posizioni per caricare DLL di riferimento?

So che il framework .NET cerca DLL di riferimento in diverse posizioni

  • Global Assembly Cache (GAC)
  • Qualsiasi percorso privato aggiunto all’AppDomain
  • La directory corrente dell’assembly in esecuzione

In quale ordine vengono cercate quelle località? La ricerca di una DLL viene interrotta se viene trovata una corrispondenza o continua in tutte le posizioni (e in caso affermativo, in che modo vengono risolti i conflitti)?

Inoltre, si prega di confermare o negare tali luoghi e fornire eventuali altri luoghi che ho omesso di menzionare.

Il caricamento dell’assieme è un processo piuttosto elaborato che dipende da molti fattori diversi come i file di configurazione, i criteri del publisher, le impostazioni dell’appadain, gli host CLR, i nomi di assembly parziali o completi, ecc.

La versione semplice è che il GAC è il primo, quindi i percorsi privati. % PATH% non è mai usato.

È preferibile utilizzare Assembly Binding Log Viewer (Fuslogvw.exe) per eseguire il debug di eventuali problemi di caricamento degli assembly.

EDIT http://msdn.microsoft.com/en-us/library/aa720133.aspx spiega il processo in modo più dettagliato.

Ho trovato un articolo che fa riferimento all’articolo MSDN sull’ordine di ricerca DLL che dice

Per le dipendenze del codice gestito, la Global Assembly Cache prevale sempre; l’assembly locale nella directory dell’applicazione non verrà prelevato se nella GAC ​​esiste una copia esistente (o più recente con criterio).

Considerando questo, suppongo che l’elenco MSDN sia corretto con un’aggiunta

  0. Cache di assemblaggio globale 

“La directory corrente non viene più ricercata per prima cosa durante il caricamento delle DLL! Questa modifica è stata apportata anche in Windows XP SP1. Il comportamento predefinito ora consiste nel cercare dapprima tutte le posizioni del sistema, quindi la directory corrente e infine tutti i percorsi definiti dall’utente. “

(ref http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx )

L’ordine di ricerca predefinito, che può essere modificato dall’applicazione, è anche descritto su MSDN: http://msdn.microsoft.com/en-us/library/ms682586.aspx