visual studio stop paso modo interrupcion excepciones error encuentra depurar configuracion aplicacion .net exception visual-studio-2010 assembly-resolution

.net - stop - visual studio break on exception



Consejos para ayudar a depurar "No se pudo cargar el archivo o ensamblado X o una de sus dependencias" (7)

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 ...

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 se configuraron en el Marco 4 .

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

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

Lo que es confuso sobre esta excepción es el texto adicional: no es una aplicación Win32 válida .

El seguimiento completo de la pila de excepciones está en PasteBin , pero no parece arrojar mucha más luz sobre el tema ...

Lo que he intentado 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. Comprobando cualquier referencia innecesaria a la DLL en cuestión (ninguna encontrada).
  6. El archivo de licencia asociado para el archivo DLL en cuestión está en el mismo directorio con él.

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


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

Intenta configurar tu ejecutable en x86 y ver si funciona. Si no prueba el registro de fusión para obtener más detalles sobre el error.


Propina

Una vía de investigación que emprendimos, que resolvió parte de nuestros problemas, pero no el problema general, fue una combinación de ensambles x86 (32 bits) y x64 (64 bits) que se referían entre sí.

Asegúrese de que no tiene ensambles de 32 bits que dependen / hacen referencia a ensamblajes de 64 bits.


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

En la sección de configuración avanzada del grupo de aplicaciones, establezca ''Habilitar aplicaciones de 32 bits'' en verdadero 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 usa Windows Server 2008 (no R2), consulte esta publicación sobre cómo asignar los permisos correctos para la identidad de su grupo de aplicaciones.


Cambiar la sección de configuración avanzada del grupo de aplicaciones -> configurar ''Habilitar aplicaciones de 32 bits'' para resolver mi problema.


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


Esto se debe a que está intentando cargar una dependencia binaria (uno de los archivos de 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, la aplicación se agrupa de forma predeterminada en el modo de 64 bits.

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

La mayoría de las aplicaciones C ++ y C escritas en .Net requieren ser compiladas 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 resolver usando uno de los siguientes:

si desea mantener su referencia / dependencia de 32 bits:

  1. Configure específicamente su aplicación IIS para que se ejecute en modo de 32 bits.
    • En la administración de IIS;
    • Grupo de aplicaciones -> Configuración avanzada (a la derecha)
    • "Aplicaciones habilitadas de 32 bits" configuradas en True.
    • Reinicie su grupo de aplicaciones
  2. Instale ambos ensamblajes (32 bits 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 solo quieres que funcione:

  1. Reemplaza tu binario de 32 bits en tu carpeta Bin con la de 64 bits. IIS no tendrá problemas para cargarlo.

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