2009-10-22 15 views
16

Tengo una solución con 3 proyectos (GUI, BL y DAL). El ensamblado DAL está firmado e implementado en el GAC.Prioridades de carga del ensamblado .NET

Cuando construyo la solución, el DAL se compila y el conjunto se coloca en la carpeta bin del proyecto principal. Pero cuando ejecuto la aplicación, carga la versión de GAC en lugar de la local. ¿Por qué es esto?

Me di cuenta de eso porque la versión en el GAC no era la última y faltaban algunos métodos, aunque compilaba bien.

¿El GAC tiene prioridad sobre la carpeta de la papelera local?

Tks con antelación

Respuesta

19

Respuesta corta , el GAC tiene prioridad sobre los archivos locales.
este es un comportamiento diferente al que estamos acostumbrados en el mundo dll nativo (sin contar algunos archivos DLL del sistema que siempre se cargaron desde SYSTEM32).

¿Por qué?
Imagine que tiene múltiples aplicaciones con el mismo ensamblaje ahora que el ensamblaje tiene un error ¿cómo arregla todas sus aplicaciones? Es difícil comenzar a buscar todas las aplicaciones en todos los controladores, es más fácil implementar un solo ensamblado en el GAC y arreglar toda la aplicación a la vez.

En cuanto a su problema, si cambia la API, debe cambiar la versión de ensamblaje de ese ensamblaje, de esta manera el motor de fusión recogerá la versión que está en la carpeta local.

+0

Tks para la respuesta, especialmente para la última parte sobre el control de versiones. – Dante

7

Sí se comprueba la primera GAC. Las reglas de carga están documentadas here. Para solucionar su problema, debe actualizar la versión del conjunto a medida que cambia la API.

+0

¡Tks para el enlace, muy útil! – Dante

Cuestiones relacionadas