2010-02-12 7 views
5

Tenemos diferentes versiones de ensamblajes sin nombre seguro, y no hay redirecciones vinculantes/rutas de sondeo para ellos en app.exe.config. Por ejemplo, MyDll (1.0.0.0_null_neutral) y MyDll (2.0.0.0_null_neutral). En relación con app.exe, estos ensamblados se almacenan en LAC \ MyDll_1.0.0.0_null_neutral y LAC \ MyDll_2.0.0.0_null_neutral.¿Cómo funciona .NET Runtime Locate Non-Strong-Named 'Ensambles?

Mi entendimiento es que debido a que los ensamblados MyDll no tienen un nombre seguro, el tiempo de ejecución .NET no diferencia entre las diferentes versiones de MyDll. Por lo tanto, si MyDll 1.0.0.0 ya estaba cargado en la memoria y se ejecutó algún código que fue construido contra MyDll 2.0.0.0, el tiempo de ejecución de .NET no cargaría MyDll 2.0.0.0.

Sin embargo, cuando me conecté al proceso con VS2008 y vi la ventana de módulos, noté que tanto MyDll 1.0.0.0 como MyDll 2.0.0.0 se cargaban desde la carpeta LAC.

Parece que hay un vacío en mi comprensión en alguna parte. ¿Alguien puede señalarlo?

EDIT: Gracias por las respuestas hasta el momento. Sí, me salté ese bit. El ejecutable escucha el evento AssemblyResolve y lo maneja mirando en LAC.

Estaba bastante seguro de haber visto alguna documentación de MSDN antes de que dichas versiones se ignoren a menos que un ensamblado tenga un nombre seguro. Veré si puedo desenterrarlo.

+3

No es posible que funcione de la forma en que lo describe. No hay forma de que CLR encuentre una DLL en el subdirectorio LAC sin alterar la ruta de exploración. –

+0

¿Cuál es su propósito de tener dos versiones diferentes de un conjunto que se ve igual desde aquí? ¿No puedes cargar lo último para que tu aplicación funcione? –

+0

Hay 2 versiones diferentes porque la aplicación consta de diferentes complementos escritos por diferentes equipos, cada uno de los cuales podría estar utilizando una versión diferente del ensamblaje. Normalmente, solo utilizamos la versión más alta mediante una ruta de prueba/redirección de enlace. Pero solo quería saber si el CLR no tiene en cuenta el control de versiones para ensamblajes no fuertes. –

Respuesta

1

http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

Paso 2 está comprobando para ver si se ha cargado, y que es la versión específica, incluso con artículos que no están con nombre seguro.

El paso 4 está intentando cargar el conjunto a través del sondeo, y esto no es específico de la versión.

Lo que me confunde es que si no tiene ninguna información en su archivo de configuración, ¿cómo es que encuentra la DLL en primer lugar? Creo que también hay una brecha en mi comprensión :-).

Cuestiones relacionadas