2008-09-08 5 views
48

Yo sé que el marco .NET busca DLL que se hace referencia en varios lugares¿En qué orden se buscan las ubicaciones para cargar archivos DLL referenciados?

  • caché de ensamblados global (GAC)
  • Cualquier ruta privadas agregan al dominio de aplicación
  • El directorio actual del conjunto de la ejecución de

¿En qué orden se buscan esas ubicaciones? ¿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 otras ubicaciones que no he mencionado.

Respuesta

52

carga Asamblea es un proceso bastante complicado que depende de un montón de diferentes factores como archivos de configuración, políticas para editores, ajustes de dominio de aplicación, Servidores CLR, nombres de ensamblaje parciales o completos, etc.

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

Lo mejor es utilizar Assembly Binding Log Viewer (Fuslogvw.exe) para solucionar los problemas de carga del conjunto.

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

+1

No estoy teniendo ningún problema real de carga de montaje. Intento entender el orden de búsqueda/carga desde una perspectiva académica. –

+0

Y tienes razón sobre '% path%' ...Había confundido esto de algún trabajo con llamadas p/invoke (utilicé '% path%' para simplificar el uso de 'DllImportAttribute'). –

+3

Si un .llll dll hace referencia a un dll nativo, las rutas se pueden usar – rerun

2

"Ya no es el directorio actual busca en primer lugar al cargar DLL! Este cambio también se hizo en Windows XP SP1. El comportamiento por defecto ahora es buscar en todas las ubicaciones del sistema en primer lugar, a continuación, el directorio actual, y finalmente cualquier ruta definida por el usuario ".

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

El orden serach predeterminada, que puede ser cambiado por la aplicación, también se describe en MSDN: http://msdn.microsoft.com/en-us/library/ms682586.aspx

+1

Esto parece depender de cargar un conjunto regular de Dll no .NET. – Tanerax

6

I conocer an article referencia al artículo de MSDN en DLL search order que dice

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

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

0. Global assembly cache
+0

el artículo ya no existe, por lo que no tenemos idea de cuál es el resto de la lista en función de su respuesta – Blub

+0

Todos los enlaces están bien para mí. –

Cuestiones relacionadas