Referencia a 2 versiones diferentes de log4net en la misma solución


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 simply accounting, lamentablemente todavía está usando log4net 1.2.9.0.

Así 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 ensamblado. Intenté usar una redirección de enlace sin éxito: las 2 DLL no tienen lo mismo clave.

Estoy considerando recompilar NHibernate para usar log4net 1.2.9.0, pero parece que lo que hay que hacer es incorrecto y mi sensación es que Simplemente Contabilidad 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 resolver en absoluto?

Author: Daniel Williams, 2010-07-01

3 answers

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

Usted 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 agregar referencia). Puede configurar la propiedad copiar a directorio de salida para copiar siempre de modo que se copie automáticamente a la carpeta de salida cuando compile.

Luego modificas la aplicación.archivo de configuración añadiendo 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[AssemblyName]

 139
Author: Joel Gauvreau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:19

Puede agregar una exclusión al registro. Simplemente agregue 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 el tiempo de ejecución de.net se salte la validación para los ensamblados listados. En teoría, esto es un problema de seguridad, pero dado que la clave privada está abierta de todos modos, apenas hay impacto.

 5
Author: Joep Beusenberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-04 09:25:53

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

 2
Author: Diego Mijelshon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-01 17:28:43