2011-01-10 42 views
12

Se me ha pedido que eche un vistazo a un error en una aplicación ASP/C# con su integración con Paypal. El error, que se muestra en su totalidad, es:No se pudo cargar el archivo o ensamblado log4net o una de sus dependencias

No se pudo cargar el archivo o ensamblado 'log4net, versión = 1.2.0.30714, Culture = neutral, PublicKeyToken = b32731d11ce58905' o una de sus dependencias. La definición del manifiesto del conjunto ubicado no coincide con la referencia del ensamblado. (Excepción de HRESULT: 0x80131040)

Por lo que entiendo, esto significa que el archivo real se encuentra (es decir, log4net.dll en mi directorio bin) no coincide con la versión esperada basada en alguna configuración de montaje. El problema que tengo es que no puedo ubicar dónde se hace referencia a este archivo.

Tengo acceso a todos los archivos en el directorio raíz web del sitio, y no puedo encontrar ningún archivo de configuración que haga referencia a esta DLL. ¿En qué otro lugar debo mirar para determinar qué está causando el desajuste?

Como nota, me he asegurado de que la versión de la DLL en el directorio bin esté actualizada, pero esto no parece haber resuelto nada.

Respuesta

9

También debe controlar las referencias en los proyectos: las referencias se compilan en el ensamblaje e intentarán cargarse. Supongo que tiene una referencia obsoleta al ensamblaje log4net pero está usando la última versión.

+0

Eso tiene sentido. ¿Hay alguna forma de que vea qué referencia se está haciendo en el proyecto? ¿En qué archivo se ubicaría normalmente al mirar el proyecto compilado? – Elie

+0

No debe mirar el proyecto compilado, sino el no compilado, el archivo csproj. de lo contrario, creo que depende de .exe (en la publicación de Mark). – Femaref

+0

Esto también se puede verificar en los paquetes nuget. Si uno de sus proyectos hace referencia a log4net versión 1.2.3.4 y los otros proyectos buscan la versión 5.6.7.8 de log4net, entonces obtendrás este error. (o cualquier otro paquete nuget). Simplemente haga coincidir esas versiones, y ya está listo para comenzar. – Krishna

1

No tengo ninguna información útil sobre el error específico. Sin embargo, en caso de que no los haya utilizado, un par de utilidades útiles para ayudar con este tipo de problema son Dependency Walker y .NET Reflector.

El comprobador de dependencias se puede usar para ver si hay módulos inesperados utilizados por el ensamblaje log4net. Y la utilidad Reflector muestra todo tipo de información útil sobre los ensamblajes (incluidas las versiones, los ensamblados a los que se hace referencia, sin mencionar el código desmontado).

2

Probablemente tenga la última versión de log4net pero tenga un proyecto que hace referencia a uno anterior. Puede forzar a todos los conjuntos que hacen referencia a la versión antigua para hacer referencia a la nueva versión mediante el uso de un <bindingRedirect>

Puede encontrar más información acerca de ellos aquí: http://msdn.microsoft.com/en-us/library/eftw1fys.aspx

Si usted no sabe la versión específica para redirigir, puede también use una variedad de versiones y apúntelas a su versión específica.

1

También encontré este problema y la razón por la que sucedía era que el proyecto, por alguna razón, estaba sacando el log4net del GAC, por lo que es bastante posible que la versión del GAC no coincida con la versión mencionada en su proyecto

14

Tuvimos este problema también cuando nos mudamos a VS 2010 y .NET 4.0, no usamos log4net en absoluto, pero sospecho que otra cosa que usemos (¿tal vez Crystal Reports?) y también sospecho Hay un dll que usamos que también es un dll de 32 bits porque cuando cambio la opción "Habilitar aplicaciones de 32 bits" en la configuración avanzada para el grupo de aplicaciones en IIS a "Verdadero" todo funcionó de nuevo.

+0

Sí, para mí definitivamente se debe a Crystal Reports. – basher

+0

Es gracioso. También me pasó a mí, pidiendo una referencia que mi solución no usa en absoluto. Mi solución que "funcionó" solo reinicia VS2017. Y sé exactamente que el proyecto previamente cargado usa log4net. Pero actual no del todo. Parece que comparten algunos archivos temporales o smth y hay un choque. – Saulius

4

Tuvimos un problema similar con nuestra aplicación web. Pasamos de .NET 1.1 de 32 bits a .NET 4.0 de 64 bits.

El error que estaba recibiendo dentro de nuestro uno de nuestros controles de usuario era el siguiente:

ASP.NET runtime error: Could not load file or assembly 'log4net' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

Mi conjetura es que estamos compilando una DLL en 64 bits, pero su referencia a una DLL de 32 bits ? Estoy de acuerdo con lo que Matt Palmerlee dijo anteriormente: cambiar el grupo de aplicaciones al modo de 32 bits soluciona el problema, pero aún está atrapado en un grupo de aplicaciones de 32 bits. Queríamos aprovechar la memoria extra de 64 bits que ofrecerá nuestros grupos de aplicaciones de IIS.

En última instancia, no pude averiguar cuál de las DLL de terceros hacía referencia a log4net. Me di cuenta después de construir que un log4net.dll se copió en mi directorio "bin" y hice clic derecho en él y descubrí que estaba relacionado con Apache Foundation - http://logging.apache.org/log4net/

Terminé simplemente descargando el último log4net.dll para .NET 4, lo agregué como referencia al proyecto de mi aplicación web, recompillé y luego volví a abrir el control del usuario y el error desapareció.

log4net download

Esperanza esto ayuda

+0

Tuve el mismo problema ... me refería a log4net de GAC, así que sus comentarios me ayudaron a solucionarlo ... gracias – Munawar

0

que iba a seguir el consejo de Matt para permitir que las aplicaciones de 32 bits en la configuración del grupo de aplicaciones de IIS.

Resulta que ni siquiera tuve que ir tan lejos, el error se resolvió tan pronto como cambié a IIS de Cassini.

Para cambiar a IIS:

  1. habilitar IIS en Programas y características de Windows (Asegúrese de que también permiten "ASP.NET xx" nodo bajo IIS> Servicios World Wide Web> Características de desarrollo de aplicaciones)
  2. En Propiedades del proyecto> Web> Usar servidor web IIS local> Crear directorio virtual (debe ejecutar VS como administrador para hacer esto).
  3. proyecto de construcción> Ejecutar
  4. error

Sin log4net para mí después de esto.

No sé por qué lo conseguí porque ni siquiera uso log4net en ninguna parte, pero me alegro de que se haya ido.

2

Mismo error aquí, así es como lo solucionamos: descargando la última .NET 4.0 log4net.dll de Apache y reemplazando la versión en la carpeta bin funcionó para mí. Debe agregar la referencia a su proyecto para hacerlo permanente. Aquí está el enlace: Apache

Vaya a Descargas, Binarios y elija la nueva versión de la clave. Una vez descargado, vaya a la carpeta .Net 4.0 para encontrar el archivo .dll.

0

Después de leer estas respuestas terminé revisando .csproj y buscando la referencia real de 'Lib \ log4net.dll' en la sección. Eliminé esto y el proyecto compilado.

Cuestiones relacionadas