visual studio structured net .net nhibernate dll log4net

.net - studio - log4net structured logging



Hacer referencia a 2 versiones diferentes de log4net en la misma soluciĆ³n (3)

Encontré la solución al usar esta respuesta a una pregunta similar

Crea 2 carpetas en su 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 la adición de referencia). Puede establecer que la copia en la propiedad del directorio de salida se copie siempre para que se copie automáticamente a la carpeta de salida cuando compile.

Luego modifique 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 utilizando sn -T [assemblyName]

Estoy usando NHibernate 2.1.2.400 que hace referencia a log4net 1.2.10.0. En el mismo proyecto, también utilizo el SDK simplemente contable, lamentablemente todavía usa log4net 1.2.9.0.

De modo que 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. Traté de usar una redirección de enlace sin éxito: las 2 DLL no tienen la misma clave.

Estoy considerando recompilar NHibernate para usar log4net 1.2.9.0, pero parece que es algo incorrecto y mi opinión es 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?


Puede agregar una exclusión al registro. Solo agrega estas claves:

HKEY_LOCAL_MACHINE/Software/Microsoft/StrongName/Verification/log4net,681549d62126b7b8 HKEY_LOCAL_MACHINE/Software/Microsoft/StrongName/Verification/log4net,1b44e1d426115821 HKEY_LOCAL_MACHINE/Software/Microsoft/StrongName/Verification/log4net,669e0ddf0bb1aa2a

Esto hará que la validación de omisión de tiempo de ejecución .net para los ensamblados enumerados. En teoría, este es un problema de seguridad, pero dado que la clave privada está abierta de todos modos, apenas tiene impacto.


Si la redirección de enlace no funciona y el SDK simplemente contable es de código cerrado, una posible solución es recompilar NHibernate para usar log4net 1.2.9.0.