Tengo un ensamblado .NET que (por razones fuera de mi control) debe estar en el GAC Sin embargo, otro programa utiliza el mismo conjunto, que tiene su propia copia de una versión anterior del mismo conjunto. Debe usar su propia copia y no lo que esté en el GAC. El control de versiones correcto es probablemente más complicado de lo que vale en este caso, por razones que no entraré. Mi pregunta es: de todos modos hay que decirle a .NET: simplemente use ESTA DLL, aquí en este directorio - ignore lo que encuentre en el GAC o en cualquier otro lado.¿Cómo puedo forzar .NET para usar una copia local de un ensamblaje que está en el GAC
Respuesta
¿Has probado Assembly.LoadFromFile()? Esto es algo manual, pero debe cargar su ensamblaje en la memoria antes de que sea necesario. .NET usará el que está en la memoria en lugar de buscarlo.
Otra forma sería si el ensamblado local no estuviera firmado, podría diferenciarlo de esa manera.
Rob
Asegúrese de que la Asamblea GAC y la Asamblea local de tener diferentes números de versión (no es una mala idea dejar que el número de compilación, al menos, incremento automático por su AssemblyVersion en AssemblyInfo-cardado salvaje: [assembly: AssemblyVersion ("1.0.0. *")]). A continuación, redirigir su estructura de encuadernación mediante configuración de tu aplicación:
- http://msdn.microsoft.com/en-us/library/2fc472t2(VS.80).aspx
- http://msdn.microsoft.com/en-us/library/433ysdt1(VS.80).aspx.
En su caso, usted no necesitará el "AppliesTo" atributo de la configuración assemblyBinding. Solo necesita algo como:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="YourAssembly" publicKeyToken="AAAAAAAAAAAA" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.2.1.0" newVersion="5.0.8.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
¿Puede evitar el uso de esta redirección de encuadernación recompilando la aplicación para usar la nueva versión del dll, o es ¿Algun cambio de configuración siempre es necesario? – user37078
Establecer la parte de revisión de su número de versión en '*' no hace que aumente automáticamente. La documentación de MSDN en [AssemblyVersionAttribute] (http://msdn.microsoft.com/en-us/library /system.reflection.assemblyversionattribute.aspx) indica que debe ser aleatorio, pero en la práctica Visual Studio usa el número de segundos desde la medianoche dividido por 2. –
Entonces, ¿qué está diciendo es que cada ensamblado se volverá a versionar en cada compilación, incluso si no tiene cambios, solo para que podamos romper la dependencia de GAC? ¿Para qué sirve el redireccionamiento obligatorio de ensamblaje? Lo único que se me ocurre es que podría usarse en prod, de modo que si su proyecto hace referencia a 5.0.8.3453 en lugar de 5.0.8.1 en GAC solo porque estaba remodelando la versión en dev sin hacer cambios, será redirigido a 5.0.8.1. ¿Está bien? Clunky, pero no veo otra forma de evitar esto. –
Si tienen el mismo número de versión, la respuesta es que no puede. Si intenta cargar un ensamblaje que tenga el mismo nombre completo de ensamblaje (nombre, versión, clave) que un ensamblaje GAC, el CLR seleccionará el ensamblaje GAC cada vez.
@downvoter cuidado de explicar? – JaredPar
No sé quién votó negativamente, pero experimento lo mismo que dice @JaredPar y me vuelve loco. Se carga desde el GAC. Tengo dos ensamblajes con el mismo nombre completo, y quiero cargar mi versión ligeramente modificada. AGAVE. –
has probado esto? http://www.aip.im/2013/04/how-to-force-iis-asp-net-to-use-assembly-from-the-bin-folder-instead-of-gac/ – Niloofar
puede establecer el DEVPATH para obligar a cargar un ensamblado, consulte link text
Esto no responde a su pregunta, ya que sólo significa para el uso de desarrollo e incluso entonces no es realmente recomendable, ya que no refleja su uso en producción. Sin embargo, pensé que lo compartiría de todos modos, ya que es bueno saberlo.
Tuve un problema similar. Cambié el publicKeyToken del dll de destino utilizando ildasm
y ilasm
para generar un nuevo dll. Luego lo actualicé en la referencia del proyecto para señalar el nuevo dll. Los pasos que tomé son here.
Esto funcionó para mí.
- 1. Instalación de un ensamblaje en GAC para mono/.NET
- 2. ¿Cómo evitar que una aplicación .NET cargue/haga referencia a un ensamblaje desde el GAC?
- 3. nUnit: ignore la copia de GAC de una DLL
- 4. ¿Puedo encriptar web.config con un proveedor de protección personalizado cuyo ensamblaje no está en el GAC?
- 5. ¿Cómo extraer un ensamblaje del GAC?
- 6. C#: ¿Cómo cargar el ensamblaje desde GAC?
- 7. proyecto de instalación no está ensamblaje registrando correctamente en GAC
- 8. Cómo hacer referencia a un ensamblaje en GAC
- 9. ¿Cómo hacer referencia al ensamblaje desde GAC?
- 10. Instalar un ensamblaje en GAC mediante programación
- 11. Instalar .NET 4.0 dll en el GAC
- 12. ¿Por qué mi ensamblaje no está visible en "Agregar referencia> .Net" cuando está instalado en el GAC?
- 13. Forzar el servicio web .NET para usar la clase de objeto local, no la clase de proxy
- 14. C# cómo registrar el ensamblaje en el GAC sin GacUtil?
- 15. ¿Cómo registro un archivo .NET DLL en el GAC?
- 16. ¿No se puede desinstalar un Ensamblaje de GAC?
- 17. ¿Cómo instalar el ensamblaje en GAC usando Msbuild?
- 18. ¿Se necesita instalar un ensamblado COM + (.net) en el GAC?
- 19. ¿Cómo puedo arreglar un ensamblaje que hace referencia a una versión antigua (beta) de .NET?
- 20. Forzar instalador para actualizar un archivo en el GAC independientemente del número de versión
- 21. ¿Puedo recuperar un registro SVN desde una copia local?
- 22. "Copiar local" no copia ensamblados en el directorio de salida
- 23. ¿Cómo puedo usar htaccess para forzar www. en varios dominios
- 24. ¿Qué es el GAC en .NET?
- 25. ¿Cómo debo forzar la carga de un ensamblaje al que se hace referencia?
- 26. ¿Cómo puedo obtener IP local en .NET?
- 27. ¿Cómo copio manualmente ensamblajes en el GAC?
- 28. ¿Cómo usar un ensamblado .Net en Delphi sin registrarlo en GAC o COM?
- 29. ¿Cómo agrego un ensamblado .NET al GAC en InnoSetup?
- 30. ¿Cómo puedo forzar una consulta para que no use un índice en una tabla determinada?
Bonita idea, pero no, no funciona - LoadFile() carga el ensamblaje correcto, pero cuando se utiliza el ensamblaje al que se hace referencia, todavía se carga del GAC. :( – EMP
No hay una forma administrada de cargar una copia local de un ensamblado GAC – JaredPar
Realmente decepcionante que no hay manera. –