2010-12-07 20 views
14

Tengo dos bibliotecas diferentes que son críticas para mi aplicación y que dependen de las diferentes versiones de log4net.dll. Probando ambos dll's en mi carpeta bin aparece el error habitual cuando se llama a la pieza de terceros que estoy usando:Las bibliotecas de terceros se refieren a diferentes versiones de log4net.dll

No se pudo cargar el archivo o ensamblado 'log4net, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 1b44e1d426115821' o una de sus dependencias. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia de ensamblaje. (Excepción de HRESULT: 0x80131040)

¿Hay alguna manera en que la aplicación pueda hacer referencia a ambos dll? Los dll's de terceros son el contenedor IOC de Windsor y la API de Paypal, ambos críticos para esta aplicación.

+0

Voy a salir a un miembro aquí, pero creo que se podría ILMerge las asambleas, incluso sin poseer el código y ello eximiría a ese problema. –

Respuesta

9

Esta pregunta puede tener algunas respuestas que te ayudarán.

Referencing 2 different versions of log4net in the same solution

Alternativamente, si se trata de facilidad de registro de Windsor que depende de log4net y no Windsor en sí, es posible que pueda escribir su propia abstracción log4net basado en la versión de log4net utilizado por la API de PayPal y le dice Windsor para usar eso en su lugar.

aquí es la ubicación de la abstracción log4net en repositorio de código fuente del Castillo: https://github.com/castleproject/Castle.Core/tree/master/src/Castle.Services.Logging.log4netIntegration

No consumo Castillo, así que no puedo decir cómo configurarlo para hacer referencia a su propia abstracción log4net, pero apuesto a que no es demasiado difícil (suponiendo que sea posible).

Aquí hay un enlace a otra publicación aquí en SO que describe la configuración de Castle con log4net. También habla brevemente acerca de cómo escribir una función de registro de registro personalizado:

Logging with Castle.Facilities.Logging and log4net

Buena suerte!

+0

Gracias, el primer enlace funcionó! Al eliminar todas las referencias del proyecto a log4net.dll y, en su lugar, al usar la aplicación/web.config para crear referencias de tiempo de ejecución para las diferentes versiones, la aplicación pudo encontrar ambas DLL sin quejarse de una discrepancia. Consulte el enlace "Referenciando 2 versiones diferentes de log4net en la misma solución" del salario para los detalles. –

1

Otro camino a seguir, creo, pero nunca lo he hecho yo mismo, es ponerlos en el GAC.

Creo que puede tener diferentes versiones de la misma dll en el GAC, y debería estar bien.

Pero también podría estar loco :)

+3

Sí, puede, pero esta no es una solución elegante. – alexandrudicu

+1

Se encuentra con un problema de escalabilidad en el sentido de que debe realizar la instalación de GAC en cada máquina para esto. Ponerlo en .config permite que esto se implemente con la aplicación. –

Cuestiones relacionadas