¿En qué orden se buscan las ubicaciones para cargar archivos DLL referenciados?

Sé que .NET Framework busca DLL referenciadas en varias ubicaciones

  • Caché de ensamblaje global (GAC)
  • Cualquier ruta privada añadida al AppDomain
  • El directorio actual del ensamblaje de ejecución

¿En qué orden se buscan esos lugares? ¿La búsqueda de una DLL ha cesado si se encuentra una coincidencia o continúa en todas las ubicaciones (y en caso afirmativo, cómo se resuelven los conflictos)?

Además, confirme o niegue esas ubicaciones y proporcione cualquier otra ubicación que no haya mencionado.

La carga de ensamblaje es un proceso bastante elaborado que depende de muchos factores diferentes, como archivos de configuración, políticas de editor, configuración de dominio de aplicación, hosts CLR, nombres de ensamblaje parciales o completos, etc.

La versión simple es que el GAC es primero, luego los caminos privados. % PATH% nunca se usa.

Lo mejor es usar el Visor de registro de encuadernación (Fuslogvw.exe) para depurar cualquier problema de carga de ensamblaje.

EDITAR http://msdn.microsoft.com/en-us/library/aa720133.aspx explica el proceso con más detalle.

Encontré un artículo que hace referencia al artículo de MSDN sobre el orden de búsqueda de DLL que dice

Para las dependencias de código administrado, prevalece la caché de ensamblaje global; el ensamblado local en el directorio de la aplicación no se recogerá si hay una copia existente (o más reciente con la política) en el GAC.

Teniendo esto en cuenta, supongo que la lista de MSDN es correcta con una adición

  0. Caché de conjunto global 

“¡Ya no se busca primero el directorio actual al cargar archivos DLL! Este cambio también se realizó en Windows XP SP1. El comportamiento predeterminado ahora es buscar primero en todas las ubicaciones del sistema, luego en el directorio actual y finalmente en las rutas definidas por el usuario. “

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

El orden de búsqueda predeterminado, que puede ser modificado por la aplicación, también se describe en MSDN: http://msdn.microsoft.com/en-us/library/ms682586.aspx