Estoy usando NHibernate 2.1.2.400 que hace referencia a log4net 1.2.10.0. En el mismo proyecto, también uso el SDK de contabilidad simple, lamentablemente todavía usa log4net 1.2.9.0.
Entonces puedo hacer que NHibernate funcione si hago referencia a log4net 1.2.10.0 pero el SimplySDK no funciona. Y viceversa...
Supongo que la mayoría de los problemas provienen del hecho de que log4net ha cambiado su clave de ensamblaje. Intenté usar una redirección de enlace sin éxito: las 2 DLL no tienen la misma clave.
Estoy considerando volver a compilar NHibernate para usar log4net 1.2.9.0, pero parece que no es lo correcto y creo que Simply Accounting no actualizará su SDK para usar log4net 1.2.10.0 en el corto plazo.
¿Cuál es la mejor manera de manejar esto? ¿Es posible resolverlo en absoluto?
fuente
href
atributo parece funcionar. ¡Gracias por señalar eso!Respuestas:
Encontré la solución usando esta respuesta a una pregunta similar
Creas 2 carpetas en tu proyecto, una para cada versión de log4net. Coloque cada log4net.dll en su carpeta correspondiente agregando un archivo a la solución (no con agregar referencia). Puede configurar la copia en la propiedad del directorio de salida para copiar siempre, de modo que se copie automáticamente en la carpeta de salida cuando construya.
Luego modifica el archivo app.config agregando algo como esto:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="681549d62126b7b8" /> <codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" /> <codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" /> <codeBase version="1.2.11.0" href="log4net.dll" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
puede obtener el token de clave pública de un ensamblado usando sn -T [nombreEnsamblado]
fuente
Puede agregar una exclusión al registro. Simplemente agregue estas claves:
Esto hará que el tiempo de ejecución de .net omita la validación para los ensamblados enumerados. En teoría, este es un problema de seguridad, pero dado que la clave privada está a la vista de todos modos, apenas hay impacto.
fuente
Si la redirección de enlace no funciona y el SDK de contabilidad simple es de código cerrado, una posible solución es volver a compilar NHibernate para usar log4net 1.2.9.0.
fuente