Dll tanto en el bin como en el gac, ¿cuál se usa?

Tenemos una aplicación web que se implementa en muchos sitios web con solo cambios frontend, la parte compartida del backend tiene su DLL en el GAC, por lo que solo tenemos que actualizar esa dll y todos los sitios obtienen la actualización.

¿Hay alguna manera de anular el GAC con una DLL en la carpeta / bin para probar nuevas características antes de que se publiquen?

Si tiene el mismo número de versión que el archivo DLL al que se hace referencia, se utiliza el GAC.

Si incrementa el número de versión, reconstruye el sitio web haciendo referencia al nuevo número de versión, coloca la nueva versión en el directorio / bin, entonces se usará esa DLL.

Si no quiere cambiar el número de versión, no tiene suerte.

Cuando .NET carga ensamblajes con nombres fuertes, primero intenta decidir qué número de versión usar. Lo hace a través de la referencia primero, luego busca las políticas del editor , luego busca redireccionamientos vinculantes en el archivo de configuración.

Después de hacer esto, busca el ensamblado en el GAC, luego en cualquier base de código especificada , luego explora varias carpetas del sistema de archivos para el DLL. Si en alguno de esos pasos encuentra el ensamblaje de versión correcto, se detiene.

Si no está cambiando el número de versión de su ensamblado con nombre seguro, .NET encontrará el original en el GAC y dejará de buscar. Tenga en cuenta que, dado que se detiene cuando se encuentra uno, y porque mirar en el GAC es lo primero, especificar una base de código para su ensamblaje no servirá de nada a menos que también especifique un nuevo número de versión.

Pude anular el GAC con el ensamblado en la carpeta \ bin usando el elemento .

Al especificar en mi archivo web.config puedo decirle a mi aplicación que use esta versión en lugar de la versión especificada en el GAC.

También puede consultar el elemento para especificar las ubicaciones de ensamblaje.

Creo que podría estar diciendo lo mismo que Adam Sills, pero reformulado para mi comprensión. A través de mis propias pruebas, parece que esto es lo que sucede:

  • Si su aplicación está comstackda con la versión 1.0.0.0 y 1.0.0.1 está en el GAC, entonces puede omitir el .dll de su / bin.
  • Si su aplicación está comstackda con la versión 1.0.0.1 y 1.0.0.0 está en el GAC, entonces DEBE colocar el .dll en su / bin para ignorar el GAC. Se producirá un error si la versión de GAC es anterior a la versión requerida de su aplicación, a menos que incluya la versión más reciente en su / bin.

Espero que esto sea correcto…

Puede ver la información de enlace en el archivo de registro utilizando el Visor de registro de encuadernación (Fuslogvw.exe), que se incluye en el Kit de desarrollo de software de Windows (SDK).

s