2010-02-15 27 views
20

Estoy buscando consejos/sugerencias/ideas para ayudar a depurar un problema de carga de la aplicación; No se pudo cargar el archivo o el ensamblaje ...Sugerencias para ayudar a depurar "No se pudo cargar el archivo o ensamblado X o una de sus dependencias"

La solución/proyecto en el que estoy experimentando este problema es una conversión de una copia de trabajo en Visual Studio 2008 al candidato de lanzamiento de Visual Studio 2010. El proceso de conversión pareció ser exitoso, y todos los proyectos de la solución están configurados en Framework 4.

La excepción es en un componente de terceros (una biblioteca de procesamiento de gráficos), pero cualquier respuesta podría ayudar a otros con cualquier DLL problemático.

No se pudo cargar el archivo o el ensamblado 'Aurigma.GraphicsMill.DLL' o una de sus dependencias. no es una aplicación win32 válida. (Excepción de HRESULT: 0x800700C1)

¿Cuál es confusa acerca de esta excepción es el texto adicional: no es una aplicación Win32 válida.

El seguimiento de pila de excepción completo está arriba en PasteBin, pero no parece arrojar más luz sobre el tema ...

Lo que he tratado hasta ahora sin éxito:

  1. Fácil de limpiar, reconstruir, reiniciar combinaciones de Visual Studio 2010 RC.
  2. Eliminando y volviendo a agregar el archivo DLL en cuestión.
  3. Alternar "copiar local" a verdadero y falso en la DLL en cuestión.
  4. Confirmando que después de una "compilación exitosa" la DLL en cuestión aparece en la carpeta bin \ debug.
  5. Comprobación de cualquier referencia innecesaria a la DLL en cuestión (no se encontró).
  6. El archivo de licencia asociado para la DLL en cuestión está en el mismo directorio con ella.

Tampoco he tenido suerte al golpear cualquier punto de interrupción del depurador en la carga de la aplicación.

Respuesta

6

Tuve una excepción similar cuando mi proyecto ejecutable se estableció en Cualquier CPU y tenía una referencia a un dll compilado con x86.

Intente configurar su ejecutable en x86 y ver si funciona. Si no prueba fusion log para obtener más detalles sobre el error.

+0

Gracias, la plataforma de destino no ayudó, tampoco lo hizo el registro de fusión, por una razón desconocida no le gusta informar ese problema de carga, estaba informando de otros problemas cuando se deja en ejecución ... –

6

Consejo

avenida Una investigación que llevamos a cabo, que resolvió parte de nuestros problemas, pero no el problema en general fue una mezcla de x86 (32 bits) y x64 (64 bits) Ensambles de referencia entre sí .

Asegúrese de que no tienen conjuntos de 32 bits que dependen de los conjuntos de 64 bits.

30

He encontrado la causa de este problema porque cambiaste a.net v4, ahora está utilizando un nuevo grupo de aplicaciones en IIS7 específicamente para asp.net v4 (el grupo se llama 'ASP.NET v4.0')

En la sección de configuraciones avanzadas del grupo de aplicaciones, establezca ' Habilite las aplicaciones de 32 bits para que sean verdaderas y su DLL problema se cargará ahora como se esperaba.

Obviamente, debe hacer lo mismo si su aplicación web tiene su propio grupo de aplicaciones.

Si está utilizando Windows Server 2008 (no R2) ver this post on how to assign correct permissions for your application pool identity

0

la sección Cambiar la configuración avanzada del grupo de aplicaciones -> set 'Habilitar aplicaciones de 32 bits' true resuelto mi problema.

2

Lo extraño es que estaba enfrentando el mismo problema, y ​​puse 'falso' en las aplicaciones de 32 bits de la configuración avanzada del grupo de aplicaciones, ¡y luego funcionó!

3

Esto se debe a que está intentando cargar una dependencia binaria (uno de los archivos en su carpeta Bin) que es de 32 bits y su aplicación se está ejecutando en el modo de 64 bits.

En .Net 4 e IIS 7, los grupos de aplicaciones se ejecutan de manera predeterminada en el modo de 64 bits.

La mayoría de los binarios de .Net se compilan con Any CPU en sus propiedades de compilación. Esto significa que funcionan en modo 32 y 64 bits.

La mayoría de las aplicaciones de C++ y C escritas en .Net do requieren compilarse específicamente para 32 bits o 64 bits. Esto significa que si está utilizando la versión incorrecta implementada de bin de su dependencia, no puede cargar.

Esto se puede solucionar utilizando en lo siguiente:

si desea mantener su referencia 32bit/dependencia:

  1. define específicamente su aplicación IIS para ejecutarse en modo de 32 bits.
    • En IIS Management;
    • Grupo de aplicaciones -> Configuración avanzada (a la derecha)
    • "Aplicaciones habilitadas de 32 bits" configuradas en True.
    • Arranque de nuevo el grupo de aplicaciones
  2. instalar ambos de sus montajes (32 y 64 bits) en el GAC. IIS cargará la versión correcta según el entorno operativo (en este caso, esta parece ser la de 64 bits).

Si lo que desea es conseguir que funcione:

  1. Reemplazar binario de 32 bits en la carpeta de yout Bin con la de 64 bits uno. IIS no tendrá problemas para cargarlo.
0

Compruebe si el archivo DLL fue bloqueado. Haga clic derecho en Dll> Propiedades> Desbloquear.

Cuestiones relacionadas