Sigo escuchando sobre el infierno de las DLL: ¿de qué se trata todo esto?Sigo escuchando sobre el infierno de DLL, ¿qué es esto?
Respuesta
Es cuando la Aplicación A instala una DLL compartida v1. 0, la aplicación B viene y actualiza la DLL compartida a v1.1 que debería ser compatible, pero hay comportamientos ligeramente diferentes, luego la aplicación A deja de funcionar correctamente y reinstala v1.0 luego la aplicación B deja de funcionar ... ahora imagínese esto con más de 2 aplicaciones digamos una docena: DLL Hell.
Y este problema ahora está sucediendo con .NET, aunque es menos común. Si tienes una aplicación que usa dos ensamblajes, y esos dos usan un tercer ensamblaje, entonces estás en .NET Hell. Especialmente si esos dos ensamblajes utilizan cada uno una versión diferente de este tercer ensamblaje ... –
Pero esperen, ¿no han resuelto este problema implementando versiones paralelas? – user3509153
En pocas palabras, en los buenos viejos días COM cada componente COM tenía que registrarse (se creó una entrada en el registro) antes de ser utilizado. Entonces su programa crearía un nuevo objeto al proporcionar el nombre de tipo (que era una clave en el registro). Y ahora no tenía ningún control sobre qué dll realmente se cargaría, cualquier otro software registraría alguna versión más nueva/antigua/completamente diferente de este dll, etc.
Ocurre cuando una aplicación instala un dll en el sistema, y otra aplicación lo reemplaza con otra versión de la DLL que no es compatible con la anterior.
No es un problema en C# (y .NET en general) porque los ensamblados .NET son lo suficientemente inteligentes como para ser compatibles con la versión (y .NET tiene el GAC que maneja diferentes versiones).
Excepto que .NET ignora el número de revisión (4º elemento en la versión) y es posible tener revisiones incompatibles. Sucedió a un colega con un componente suministrado por Microsoft, nada menos. –
@Michael Borgwardt: Es una adición valiosa, gracias. –
DLL infierno era en su mayoría de los días COM, donde tenía que registrarse un dll COM, y los clientes de la buscarían en el registro. Fue una pesadilla porque el sistema de archivos (* .dll, * .ocx) podría modificarse dejando entradas obsoletas en el registro. Las aplicaciones dejarían de funcionar, fue horrible.
A continuación, obtendrá el escenario donde se instala una nueva aplicación y registra una nueva versión de la DLL, rompiendo así las aplicaciones que realmente querían la versión anterior. Volverías a instalar la aplicación anterior y romperías la nueva en el proceso.
Con .NET, no es necesario registrar los archivos DLL (el GAC es un caso especial y tiene una disposición para evitar el problema de control de versiones descrito anteriormente), el cargador solo recoge los ensambles buscando en las rutas correctas.
¿Qué significa COM? – user1534664
Representa el Modelo de Objetos Componentes (http://en.wikipedia.org/wiki/Component_Object_Model).Se suponía que era una forma común de que el software de Windows hablara entre sí/reutilizara bibliotecas, etc. ActiveX es un buen ejemplo. Una biblioteca podría exponer las interfaces COM ya que es un contrato, y otra aplicación escrita en un idioma diferente podría consumir esa biblioteca siempre que tenga soporte COM. Todas las bibliotecas creadas con VB6 eran bibliotecas COM: deben registrarse en el registro de Windows para que otras aplicaciones las descubran. –
Simple: en las versiones anteriores de Windows, era posible tener múltiples aplicaciones intentando acceder a la misma biblioteca compartida. No hay problema allí, es por eso que son compartidos. el problema surge cuando diferentes aplicaciones intentan acceder a diferentes versiones del mismo ensamblaje desde una ubicación central. Si todas las versiones posteriores del dll son compatibles con versiones anteriores, y si tiene la versión más reciente, no debería haber ningún problema, pero si instala una aplicación que requiere v2, y luego instala una aplicación que requiere (e incluye) la versión 1. x, es posible que la primera aplicación deje de funcionar (porque la dll v2 se sobrescribió con v1.x).
Las versiones recientes de Windows son capaces de almacenar múltiples versiones de un dll, y suministrar el correcto a pedido.
- 1. ¿Qué es exactamente Puerto escuchando
- 2. ¿Nos dirigimos al infierno de jar en la plataforma java similar al infierno de dll?
- 3. ¿Qué es el secuestro de dll?
- 4. ¿Puedo hacer que un botón parezca deshabilitado y sigo escuchando los clics?
- 5. ¿Qué es el dll de interoperabilidad?
- 6. ¿Qué es un dll?
- 7. vftable - ¿Qué es esto?
- 8. _NSZombie_NSKeyValueUndefinedGetter - ¿Qué es esto?
- 9. ¿Qué es Microsoft.Web.Services2.dll
- 10. ¿Por qué el bloqueo (esto) {...} es malo?
- 11. Refactorización "incluye archivo infierno"
- 12. Side effect - ¿Qué es esto?
- 13. ¿Qué es esto en JavaScript?
- 14. ¿Qué es esto == - javascript operator?
- 15. Inyección Dll - ¿Qué es posible con eso?
- 16. PyPy: ¿De qué se trata todo esto?
- 17. ¿Es esto válido C? Sin advertencia sobre p siendo desinicializar
- 18. Infierno de genéricos de Java - Pasando en esto, pero quiere tipo T
- 19. ¿Qué tipo de JavaScript es esto?
- 20. ¿Qué es la latencia P99?
- 21. ¿Qué es "mejor": DLL COM o DLL estándar con Typelib?
- 22. ¿Qué es esto que escucho sobre la desaprobación de la etiqueta de tabla?
- 23. Cómo exponer la lista STL sobre el límite de DLL?
- 24. infierno de perfil de provisión
- 25. ¿Qué es esto de "foo. (Bar.Baz)" en el código Go?
- 26. ¿Cuál es la mejor herramienta para encontrar a qué DLL se hace referencia a otra DLL VB6?
- 27. Escuchando notificaciones en Android
- 28. Resolviendo el infierno de dependencia con el compositor
- 29. Infierno de dependencia de componente personalizado
- 30. Usuario llamado plus, ¿qué es esto?
Es algo que ahora ha sido reemplazado por .NET Hell. ;-) –
... y nuget hell –