Tip para error "Unable to load one or more of the requested types. Retrieve the LoaderExceptions..."

Enviado por Ricardo Araos el 27/09/2010 a las 7:28
Ricardo Araos

hint.gif Hace pocos días me encontré con el error "Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information." que "súbitamente" apareció, sin una explicación muy clara inicialmente.  Y mi búsqueda en Google por una solución me dejó en claro que los motivos pueden ser variados y extraños.  Así que quiero compartir mi experiencia para todos los que esta pueda ayudar.  Aclaro, de inmediato, que explicaré mi escenario y solución y que desconozco, de momento, las otras situaciones y soluciones posibles para este mismo error.

Este error se me presentó al momento de compilar una solución, que llamaré GreatSolution, que había estado compilando sin complicaciones, siendo el único cambio la actualización de una librería de referencia que  llamaré LibCore.dll, la cual también era desarrollada por mí, pero en otra solución.  La verdad es que me sorprendí inicialmente puesto que el cambio era minúsculo, y aparte del incremento de la versión, la librería no tenía cambios en ninguna de las interfaces expuestas, sino que la modificación era en la lógica interna.

Por tanto, era extraño que apareciera este error al momento de compilar, pues parecía indicar que ciertas clases no estaban disponibles de ser cargadas.  Y he aquí lo que sucedía.  La librería LibCore.dll era dependencia para otras dos librerías que también yo desarrollaba, las que llamaré LibClientFirst.dll y LibClientSecond.dll.

Ambas librerías clientes eran generadas en una misma solución, llamada ThirdSolution.  Los projectos de ThirdSolution, de tipo librería assembly, definían  referencias de dependencia a LibCore.dll, y la propiedad Specific Version tenía valor false, lo cual se interpreta como que cada uno de los proyectos no tiene dependencia a una versión específica de la librería LibCore.dll.

Pero, la confusión nace en que, si bien no hay dependencias al momento de compilar, sí las LibClientFirst.dll y LibClientSecond.dll quedan asociadas a la versión de LibCore.dll contra la cual fueron compiladas.  Dicho de otro modo, si LibClientFirst fuese compilada contra la versión 2.0.1.0 de LibCore.dll, cuando quisiéramos usarla en GreatSolution necesitaríamos tener la librería LibCore.dll que indique la misma versión.  De no ser así, nos encontraríamos con que nos aparecerá el error "Unable to load one or more of the requested types...".

Podríamos tener la versión 2.0.1.1, sin ningún otro cambio que el número de versión, pero aún tendríamos el mismo error.  Así mismo, podríamos tener otra librería LibCore.dll, con sutiles cambios en lógica interna, pero que mantenga el número de versión 2.0.1.0 y el error "Unable to load one or more of the requested types..." no aparecería.  Claro, podríamos tener otros problemas relacionados como que esta versión alternativa tiene un cambio en una firma de método que necesitamos.  Después de todo, para eso es que los números de versiones de librería son tan importantes y útiles.

En mi caso, la solución definitiva fue recompilar LibClientFirst.dll y LibClientSecond.dll contra la nueva versión 2.0.1.1 de LibCore.dll, y luego hacer uso de las nuevas DLL generadas en GreatSolution.  Les aconsejo que si se encuentran con este error, sobre todo en un escenario en que tienen una solución que siempre compilaba y repentinamente comienza a fallar, que revisen si están haciendo uso de una nueva versión de una librería y que no hayan terceras librerías que su solución use y que hagan uso de esta libreria actualizada.

Publicidad por Bligoo.com

Escribe un comentario

¿Quieres usar tu foto? - Inicia tu sesión o Regístrate gratis »
Comentarios de este artículo en RSS