2012-07-26 60 views
12

Busco para resolver este error:de error: No se pudo cargar el montaje log4net

Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified." This error is located in the web.config file.

Cuando copio log4net.dll al directorio bin de mi aplicación web, aparece un

Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

Este error también ocurre en el archivo web.config.

Es bastante fácil cambiar la versión y el token de clave pública para que coincida con el archivo para que el ensamblaje se cargue correctamente. Cuando hago eso, mi sitio web funciona perfectamente, excepto cuando se inicializa un objeto reportViewer. Luego arroja el error original en la etiqueta reportViewer, no en la web.config.

Mi hipótesis es que si instalo la versión solicitada de log4net.dll, mis problemas serán resueltos. Pero no tengo ni idea de qué archivo, o dónde encontrarlo. He comprobado lo obvio descargando log4net 1.2.10 y probando cada dll en la descarga.

Debo mencionar que el sitio web se ejecuta sin problemas en mi máquina de desarrollo, pero no cuando se publica en mi servidor.

Estoy ejecutando un sitio web asp.net, .NET 4.0, IIS 7, en un servidor 2008 R2 OS. Instalé Crystal Reports 13.0.1 para 64 bits (mi máquina es de 64 bits).

¿Cómo puedo resolver este problema?

EDITAR: En respuesta a la respuesta de @ Kevian, realicé el cambio en mi archivo web.config. Sigo recibiendo el error cuando la definición del manifiesto no coincide con la referencia de ensamblaje. El código que arroja este error es:

Line 33:  <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" 
Line 34:   BestFitPage="True" ToolPanelView="None" /> 
+0

era una solución a este encontró? – tomfanning

Respuesta

1

Intente agregar esto a su web.config. Básicamente le dice al tiempo de ejecución que se encuentra bien para que la carga del mismo conjunto, tanto para la versión

<runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="log4net" publicKeyToken="692fbea5521e1304" culture="neutral" /> 
       <bindingRedirect oldVersion="0.0.0.0-1.2.10.0" newVersion="1.2.10.0"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 

Tendrá que sustituir 1.2.10.0 con la versión de que en realidad tiene en su carpeta bin.

+0

Parece que funcionaría, pero no parece redirigir todas las referencias de ensamblado. – Brynne

+0

@notkilroy ¿Puedes explicar un poco más? ¿Qué quieres decir con que no redirige todas las referencias? ¿Me puede dar el mensaje de error actualizado? –

+0

No se puede cargar el archivo o ensamblado log4net. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia de ensamblaje. Sin embargo, en lugar del error que apunta al código en mi web.config, ahora apunta a una línea en una página individual. La línea es: "" – Brynne

4

Hay un par de cuestiones en juego aquí que son resolubles:

  1. El símbolo de clave pública para la versión de 32 bits de enfrentamientos log4net.dll con el utilizado por Crystal Reports. Para verificar si usted tiene este problema, realice una búsqueda de "692fbea5521e1304" en todos sus archivos Csproj - si ves referencias a CrystalDecisions Y log4net tiene este problema.
  2. La versión de de 32 bits de log4net.dll entra en conflicto con dlls que se compilan para arquitectura de 64 bits o AnyCPU. Si tiene este problema, encontrará las referencias que se muestran a continuación. Puede verificar el problema reconfigurando su grupo de aplicaciones para ejecutarlo como 32 bits y verificando si la aplicación se ejecuta; si es así, tiene este problema.
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, 

PublicKeyToken=692fbea5521e1304, processorArchitecture=x86" >

La solución que trabajó para nosotros en 64 bits era conseguir la última log4net.DLL que en realidad tiene un nuevo PublicKeyToken, sustituir el log4net.dll en su tercera carpeta bin partido, Y cambio de todas las referencias log4net.dll mirar así:

<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, 

PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">

0

he tenido este problema en mi código. Uno de los proyectos que alguien estaba usando tenía conflictos de versiones de Log4Net. Usaban 12.2.10 y yo tenía 12.2.13. Entonces, para solucionar el problema, me deshice de mi referencia y encontré su dll de referencia. Lo usé en su lugar y funcionó perfectamente.

Para encontrar una referencia Microsoft Visual Studio tiene una función de navegador. Puedes usar eso para obtener el dll. Para encontrar el dll, puede hacer clic en sus referencias en su proyecto y hacer clic en la referencia que desea encontrar. En este caso Log4Net. Mostrará una lista de dependencias, el otro log4net debería estar cerca del Log4Net seleccionado, y debería haber un texto que muestre la ubicación de la referencia de dll seleccionada actualmente. Aquí es donde encontrarás la referencia.

0

MSDOS

-- Create a virtual disk 
subst t: C:\Windows\assembly 

-- Delete log4net x64 assembly 
del t:\GAC_64\log4net\1.2.10.0__692fbea5521e1304\log4net.dll 

-- remove the virtual disk 
subst t: /d 
0

Para su tema i recomendamos que borre/quite esta DLL en refereneces y vuelve a instalar y aquí es cómo instalar correctamente Log4net en VS 2013:

1) Asegurarse de que encienda en sus nuget.org Fuentes de paquete para la utilidad NuGet Packages Manager por: Rightclick Project (no solución) luego seleccione "Paquetes ManaUG NUGet ..." en la parte inferior izquierda, seleccione "Configuración", luego seleccione "Administrador de paquetes" y luego seleccione "Fuentes de paquete" en Las fuentes de paquetes disponibles seleccionan "nuget.org" y también verifican "Fuentes de paquetes de Machine-wid" haciendo clic en "OK"

2) Te llevará a Administrar Paquetes de NUGet, luego seleccionas "En línea" en el panel izquierdo y luego buscas "log4net" que está portado desde apache log4j y luego lo instalas. Hecho lo encontrará instalado en Referencias en su proyecto

También adjunté capturas de pantalla.

¡diviértase!

enter image description here

enter image description here

Cuestiones relacionadas