Cómo solucionar" No hay manera de resolver el conflicto entre " error?


Log4net añadido recientemente.dll a nuestro objeto de datos. Nuestro objeto de datos se construye perfectamente, pero cuando intenta construir cualquier cosa que haga referencia a nuestro objeto de datos, obtiene el siguiente error:

No hay forma de resolver el conflicto entre "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" y "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Elegir " log4net, Version=1.2.10.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304" arbitrariamente.

Encontré el siguiente hilo que me permitió obtener más información sobre el problema.

Log4net se utiliza para una variedad de cosas en nuestro proyecto. Por ejemplo, crystal instaló 1.2.9 en el GAC. Sé que infragictics usa 1.2.10.

Tenemos un directorio específico - llámelo c:\references - donde construimos todas nuestras DLL y que todas nuestras aplicaciones usan para hacer referencia a nuestras DLL internas. Así que establecí específicamente mi referencia en nuestro objeto de datos a c:\references\log4net.dll que es la versión 1.2.11. Lo cual es raro porque en el mensaje de error de arriba no ves 1.2.11. Se hace referencia a la dll con una versión específica: = True & Copy Local: = True. Revisé el directorio de compilación y la versión 1.2.11 de log4net se movió correctamente.

Si ayuda aquí están algunos de los mensajes de error detallados:

There was a conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905".
  No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily.
      References which depend on "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" [C:\Windows\assembly\GAC_32\log4net\1.2.10.0__692fbea5521e1304\log4net.dll].
          C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Shared\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Shared.dll

   References which depend on "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905" [C:\Program Files (x86)\Business Objects\Common\4.0\managed\log4net.dll].          c:\references\DBObjectAdoNet.dll
            Project file item includes which caused reference "c:\references\DBObjectAdoNet.dll".

Update: Hasta ahora, la única manera que he encontrado para corregir el error es hacer referencia a log4net en cualquier referencia a DBObjectAdoNet.DLL. Este no es realmente una solución utilizable para nosotros ya que casi todo en nuestro sistema lo usa.

2nd Update : Intentó poner log4net en el GAC pensando que solucionaría el problema, pero todavía no funciona.

3rd Update : He hecho una llamada de soporte a Microsoft. Quieren que use el Montaje.LoadFrom () que estoy muy, muy reacio a hacer ya que hacemos más de 300,000 llamadas en una aplicación y requeriría reflexión para cada llamada que ralentizaría las cosas bastante trozo.

Descubrí que si desinstalo el tiempo de ejecución de crystal en mi máquina, el error desaparece, lo que no tiene mucho sentido porque lo único que hace, por lo que puedo decir, es eliminar log4net 1.2.10.0 del GAC bajo las carpetas de.NET framework 2.0, lo que no debería importar porque la aplicación es una aplicación de. NET framework 4.

Author: Community, 2012-03-22

3 answers

Abra su archivo de proyecto (.csproj en C# o .vbproj en VB.NET) for editing.

Asegúrese de que la referencia log4net es Nombre de tipo completo, tiene HintPath y SpecificVersion=True.

<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
  <HintPath>..\references\log4net.dll</HintPath>
  <SpecificVersion>True</SpecificVersion>
</Reference> 

Guarde el archivo e intente reconstruir.

 15
Author: KMoraz,
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
2014-11-25 12:29:03

Descubrimos que crystal runtime era definitivamente el problema. Si desinstalamos log4net en %windir%\assembly que crystal runtime instalado, el mensaje de advertencia desaparece. Lo que es extraño es que si instalo log4net 1.2.10 desde el sitio de log4net en el GAC, entonces el mensaje de advertencia no reaparece. Si alguien puede explicar eso, por favor agréguelo a este hilo. Crystal firmó log4net con su propia clave de nombre fuerte (el token de clave pública es diferente).

La clave para solucionar el problema de log4net es que log4net es un proyecto de código abierto. Lo que significa que simplemente podemos construir la dll desde el código fuente con un nombre diferente. Aún no lo he probado, pero eso debería solucionar el problema. Tendremos el paso adicional de construir desde el código fuente cada vez que queramos actualizar log4net, pero considerando cuánto vamos a actualizar el dll, no es gran cosa.

 2
Author: coding4fun,
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
2014-11-25 13:08:56

Causa:

Tiene dos diferentes asambleas con el mismo nombre de archivo. El compilador no sabe cuál elegir para copiar al directorio de salida por lo que da ese error No way to resolve conflict between....

En mi caso, eran completamente diferentes ensamblados que tenían los mismos nombres de archivo.

En su caso, tiene dos versiones diferentes del mismo ensamblaje (log4net)

Solución:

En mi caso, la solución fue simplemente cambie el nombre de a uno de los archivos dll.

En su caso, la solución es averiguar dónde se hizo referencia a el ensamblado anterior y corregirlo para hacer referencia al más nuevo.

 0
Author: Bizhan,
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
2018-09-07 07:58:51