Cargando múltiples versiones del mismo ensamblaje

Estoy trabajando con un ensamblado de terceros y, lamentablemente, ahora necesito cargar su última versión y la anterior en mi proyecto, así que en tiempo de ejecución puedo decidir cuál cargar. Solo necesito uno, no los dos.

Teniendo esto en cuenta, también dependo de los tipos proporcionados por los componentes, por lo que no puedo cargar desde la reflexión y consultar cada vez el método / eventos / interfaces que deseo utilizar. He visto alguna mención de cómo manejar esto a través de AppDomain s, pero no estoy seguro de cómo proceder.

¿Sería el proceso codificar en contra de una versión del componente y luego en tiempo de ejecución (usando el AppDomain ) cambiar en la DLL correcta que quiero consumir? ¿Entonces solo estaría manejando esto en el arranque?

Si ambos conjuntos son compatibles, puede definir en el archivo app.exe.config o web.config para usar siempre la nueva versión al declarar bindingRedirect.

ejemplo

           

esta entrada de configuración para dotnet 1.0 le dice al cargador de ensamblaje que siempre use la versión 1.0.3300.0 sin importar lo que se compile en el exe de llamada. Lo mismo es posible con las versiones más nuevas de dotnet

Aquí hay un par de publicaciones de aquí en SO que describen cómo cargar múltiples versiones del mismo conjunto:

Esta publicación describe cómo hacer referencia a dos versiones diferentes de log4net. Vea el comentario de @Joe B. en la respuesta aceptada para obtener más detalles sobre cómo resolvió exactamente su problema.

Las bibliotecas de terceros se refieren a diferentes versiones de log4net.dll

Esa respuesta se refiere a este enlace:

Usar diferentes versiones del mismo ensamblaje en la misma carpeta

Dentro de este hilo, hay una advertencia acerca de cargar diferentes versiones del mismo ensamblado en el mismo contexto y hace referencia a este enlace en MSDN:

http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions

Aquí hay otra con una respuesta que sugiere el uso de AssemblyResolve: Referencia dos conjuntos iguales, solo las claves públicas difieren

Si tiene dos versiones diferentes del mismo componente, ¿significa que ambas versiones pueden diferir no solo en la implementación sino también en el número de operaciones que exponen? Si este es el caso, ¿cómo puede cambiar versiones si alguna funcionalidad solo está en una de dos versiones?

De todos modos, si desea cargar las dos versiones, debería hacerlo en dos dominios de aplicación separados, porque luego puede descargar el que no necesita después. Luego, podría ejecutar su lógica en el dominio de aplicación correcto, como se describe en ¿Cómo creo un dominio de aplicación y ejecuto mi aplicación en él? .

Aquí hay una entrada de blog con una solución, también se refiere a este subproceso SO Cargando diferentes versiones del mismo ensamblaje