c# - reconoce - ¿Cómo evitar que una aplicación.NET cargue/haga referencia a un ensamblaje desde el GAC?
gacutil no se reconoce como un comando interno o externo (4)
¿Puedo configurar una aplicación .NET de una manera (configuración en Visual Studio) que hace referencia a un ensamblado "local" (no en GAC ) en lugar de a un ensamblado dentro del GAC, aunque ambos ensamblajes tienen el mismo nombre y la misma versión?
¿Viste esta respuesta?
Obligar a la aplicación ASP.NET a cargar el ensamblaje desde bin no desde GAC
Parece que estás tratando de hacer lo mismo.
Para implementar con éxito su aplicación .NET Framework, debe comprender cómo el tiempo de ejecución del lenguaje común se ubica y se une a los ensamblajes que componen su aplicación. De forma predeterminada, el tiempo de ejecución intenta vincularse con la versión exacta de un ensamblaje con el que se creó la aplicación. Este comportamiento predeterminado puede ser anulado por la configuración del archivo de configuración.
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
Si ambos conjuntos tienen un nombre fuerte (firmado), el CLR siempre cargará del GAC.
Estos son los pasos que utiliza el tiempo de ejecución para resolver las referencias de ensamblaje (de Cómo el tiempo de ejecución localiza los ensamblajes ):
Determina la versión de ensamblaje correcta al examinar los archivos de configuración aplicables, incluidos el archivo de configuración de la aplicación, el archivo de política del editor y el archivo de configuración de la máquina. Si el archivo de configuración está ubicado en una máquina remota, el tiempo de ejecución debe localizar y descargar primero el archivo de configuración de la aplicación.
Comprueba si el nombre del ensamblado se ha vinculado antes y, si es así, utiliza el ensamblaje previamente cargado. Si una solicitud anterior para cargar el ensamblaje falló, la solicitud falla inmediatamente sin intentar cargar el ensamblaje.
Comprueba el caché de ensamblaje global. Si el ensamblaje se encuentra allí, el tiempo de ejecución usa este ensamblaje.
Sondas para el montaje (... material omitido ...)
Como se indica más adelante en ese mismo artículo:
No hay una versión que compruebe ensamblajes sin nombres fuertes, ni el tiempo de ejecución verifica en el caché de ensamblados global para ensamblajes sin nombres fuertes.
Por lo tanto, si puede permitirse eliminar la firma del ensamblado local, la aplicación la usará en lugar de la del GAC.
Para obtener más detalles de los que probablemente pueda desear sobre los mecanismos de enlace de tiempo de ejecución, consulte el blog de Suzanne Cook .
Esta entrada de blog de Scott Hanselman también proporciona una gran visión general del proceso de vinculación.
Si puede cambiar el número de versión del dll local, puede usar una redirección de versión dll usando el atributo oldVersion. Puede usar un nombre seguro para el ensamblado local: mire esta página: http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx
También debe considerar que es posible modificar el número de versión de un ensamblado compilado como se describe aquí: Cambiar la versión del ensamblaje en un ensamblado .NET compilado.