No se pudo cargar el archivo o el ensamblado... Se intentó cargar un programa con un formato incorrecto (System.BadImageFormatException)
Frecuentes
Visto 560,085 veces
478
Tengo dos proyectos, ProjectA
y ProjectB
. ProjectB
es una aplicación de consola, que depende de ProjectA
. Ayer, todo funcionaba bien, pero de repente hoy cuando ejecuto ProjectB
Entiendo esto:
BadImageFormatException no se manejó:
No se pudo cargar el archivo o ensamblado 'ProjectA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.
Ambos son solo proyectos normales, sin dependencias de ningún otro proyecto que no sea .Net. Ambos son completamente .Net: no hay código nativo ni P/Invoke. Tengo otros proyectos que dependen de ProjectA
y todavía funciona bien.
Cosas que he intentado:
- Asegúrese de que ambos proyectos estén configurados en "Cualquier CPU", con el build casilla de verificación marcada. Ellos son.
- Asegúrese de que ambos proyectos sean para el mismo marco de destino (Perfil de cliente .Net 4.0).
- En ProyectoB --> Referencias --> ProyectoA --> Propiedades, asegúrese de "Copiar local" se establece a "Verdadero" _ (Verifiqué que ProjectA.dll se está copiando correctamente)
- Limpiar/reconstruir la solución. Incluso intenté eliminar manualmente las carpetas /bin y /obj en ambos proyectos.
- Reinicie Visual Studio. Reiniciar mi computadora.
- Echa un vistazo a una copia completamente nueva del repositorio.
Pero sigo teniendo el mismo error. No tengo idea de qué hice para causar esto, ni cómo solucionarlo. ¿Algunas ideas?
29 Respuestas
746
Estoy bastante seguro de que tiene un conflicto de 32 bits/64 bits. Parece que su proyecto principal podría estar configurado en 32 bits, mientras que la clase a la que hace referencia está configurada en 64 bits. Intenta mirar esta pregunta SO y este también. Entre los dos, deberías poder resolver tu problema.
contestado el 23 de mayo de 17 a las 12:05
Hazlo De alguna manera me falta por completo el menú desplegable "objetivo de la plataforma" en project-->properties-->build
- se configuró para x86; configurarlo en "Cualquier CPU" solucionó este problema. Siempre pensé que esta configuración era la misma que el menú desplegable "objetivo de la plataforma" en el administrador de configuración, pero aparentemente no lo es. (de hecho, el "objetivo de la plataforma" en el administrador de configuración no parece hacer nada en absoluto). - BlueRaja - Danny Pflughoeft
También verifique que el proyecto no sea Cualquier CPU con Preferir 32 bits marcado. Proyecto -> propiedades -> construir - reid evans
PD: Otra razón es que "Habilitar aplicaciones de 32 bits" es "falso" en la configuración del grupo de aplicaciones. Debe reiniciar IIS después de establecerlo en verdadero. - dvdmn
Lo peor que me pasó con este error fue cuando VS decidió agregar <PlatformTarget>x86</PlatformTarget>
en uno de los proyectos dependientes sin motivo alguno. Si no hubiera investigado SVN, nunca habría descubierto por qué nuestra aplicación MVC no se inicia. - Jahu
Configure en IIS DefaultAppPool-> Habilitar aplicaciones de 32 bits = Verdadero - Shantú
230
Es posible que esté enfrentando el problema con su sitio web después de implementarlo en el servidor.
Entonces necesita ajustar su grupo de aplicaciones para Habilitar aplicaciones de 32 bits.
Proceso
Respondido 09 Oct 19, 18:10
¿Me he perdido algo? OP está hablando de un aplicación de consola no implementación de IIS: "ProjectB es una aplicación de consola, que depende de ProjectA" - mickyd
Gran respuesta @AliAdravi - Stamatis Tiniakos
En mi caso, se configuró en verdadero y funcionó después de configurarlo en falso. Mismo mensaje de error. - planetaregión
165
Acabo de recibir este mensaje de error al ejecutar IIS Express en Visual Studio 2015. En mi caso, necesitaba ejecutar la versión de 64 bits de IIS Express:
Herramientas → Opciones → Proyectos y Soluciones → Proyectos Web
Marque la casilla que dice "Usar la versión de 64 bits de IIS Express para sitios web y proyectos".
Captura de pantalla:
respondido 28 nov., 19:05
Se aplica lo contrario, tenía marcado 'Usar 64 bits' y necesitaba desmarcarlo... - cjb110
Sí, cambié mi aplicación web a 64 bits para asegurarme de que tenía sobrecarga de memoria, y luego necesitaba marcar esta opción para que se cargara después de eso. ¡Gracias! - John
¡¡Una palabra, Belleza!! - Jamshaid K.
Eso fue todo para mí, es fácil olvidarse de esta configuración, una vez que estás saltando a un entorno nuevo, realmente parece que debería estar activado de forma predeterminada o vinculado a la plataforma de destino del proyecto. También es fácil olvidar que si no está utilizando IIS completo, en realidad hay algo para configurar. - miku
37
Yo tuve el mísmo problema. Configuré el "Objetivo de la plataforma" del Proyecto A ("Proyecto A" (clic con el botón derecho)->Propiedades->Crear->"Objetivo de la plataforma") en x86, pero mantuve el Proyecto B en "Cualquier CPU". La configuración del Proyecto B en "x86" solucionó esto.
Respondido 18 Abr '13, 17:04
22
Tuve este problema al ejecutar pruebas unitarias (xunit) en Visual Studio 2015 y encontré la siguiente solución:
Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64
Respondido el 30 de enero de 17 a las 22:01
Funciona de maravilla para VS 2019 también :) - el_nektarin
9
Es posible que deba cambiar el Grupo de aplicaciones configurando "Habilitar aplicaciones de 32 bits" en VERDADERO en IIS7 si tiene al menos 1 dll\exe de 32 bits en su proyecto.
Respondido el 06 de diciembre de 13 a las 16:12
OP está hablando de una aplicación de consola, no de IIS: mickyd
7
En primer lugar, obtuve esto en VS2017 con un proyecto antiguo que necesitaba para hacer un poquito cambiar y actualizar todos los proyectos al marco 4.7.
Varios otros han mencionado seleccionar Any CPU
puede solucionar este problema.
Hay un par de lugares donde debe hacerlo, y puede que no sea tan simple como seleccionar del menú desplegable. Esto me lo arregló:
1) Tienes que hacerlo tanto aquí:
2) Y también en Configuration Manager
(clic derecho en la solución)
Pero, ¿y si no está allí?
A continuación, haga clic en New
y elige estos ajustes: (gracias @RckLN)
respondido 02 mar '18, 06:03
4
Respondido el 02 de enero de 20 a las 11:01
3
Tuve el mismo problema con varios proyectos en la misma solución, terminé configurando todos los marcos de destino en .NET Framework 4 y x86 para la CPU de destino y finalmente se compiló correctamente.
Respondido 07 ago 13, 02:08
Trabajó en Release pero falló en Debug. Establezca todo en .Net Framework 4 (NO en la actualización 1) y la depuración se ejecuta ahora. - DCastenholz
3
Ninguna de estas soluciones funcionó para mí, pero al eliminar el contenido de las carpetas bin y obj, todo volvió a estar bien.
Respondido el 29 de junio de 17 a las 05:06
3
Obtuve esto cuando construí un proyecto a través de Visual Studio Online (VSTS) Build usando Visual Studio Build
Pasos.
La solucion fue:
- Eliminar la carpeta de origen existente
- Establezca explícitamente "Cualquier CPU" en la plataforma para todas las compilaciones de Visual Studio, incluidas las dependencias (vea la captura de pantalla a continuación).
- Vuelva a ejecutar la compilación
Respondido el 15 de Septiembre de 17 a las 11:09
3
El ensamblado Chilkat .NET 4.5 requiere que el tiempo de ejecución VC++ 2012 o 2013 esté instalado en cualquier computadora donde se ejecute su aplicación. La mayoría de las computadoras ya lo tendrán instalado. Su computadora de desarrollo lo tendrá porque se instaló Visual Studio. Sin embargo, si se implementa en una computadora donde el tiempo de ejecución de VC++ requerido no está disponible, se producirá el error anterior:
Instale todos los paquetes a continuación
Paquetes redistribuibles de Visual C++ para Visual Studio 2013 - vcredist_x64
Paquetes redistribuibles de Visual C++ para Visual Studio 2013 - vcredist_x86
Paquetes redistribuibles de Visual C++ para Visual Studio 2012 - vcredist_x64
Paquetes redistribuibles de Visual C++ para Visual Studio 2012 - vcredist_x86
Respondido el 11 de diciembre de 17 a las 10:12
2
También puede ver este problema si intenta empaquetar un proyecto de 64 bits con un instalador MSI en VS. ("El motivo es que el shim nativo empaquetado con el archivo .msi es un ejecutable de 32 bits").
Mira aquí para más detalles: http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx
Respondido 14 Oct 15, 17:10
Considere resumir el artículo vinculado para beneficio de futuros lectores; en caso de que el enlace se corte. - Enlace - Enlace Java
2
Para la versión más reciente de Visual Studio (v16.10 para esta respuesta), se puede solucionar cambiando manualmente la plataforma de la solución. Para mí funcionó después de cambiar de "Cualquier CPU" a "x86".
Respondido el 01 de junio de 21 a las 18:06
1
Encontré el mismo problema. Apareció de la nada y eso me pareció extraño.
En la instantánea de excepción, para FusionLog, vi lo siguiente dentro de su mensaje:
... C:\Windows\Microsoft.NET\Framework64...
Más sobre el registro de fusión: http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx
Todos los proyectos tenían una CPU de destino de AnyCPU. Cambié el proyecto de la aplicación (el proyecto que hace referencia a todos los demás proyectos) a una CPU de destino de x86. Ahora funciona.
No estoy seguro de cómo se produjo la confusión de la CPU de destino sin motivo aparente, pero así fue.
respondido 08 nov., 13:15
1
También enfrenté este problema en un proyecto, después de unos minutos encontré la solución, este problema se debe a la configuración de la CPU, si está usando Visual Studio 2010 o VS 2013, solo ve al proyecto de propiedades Y luego seleccione Compilar desde la barra lateral y habrá 5 menús desplegables, el quinto menú desplegable será CPU de destino:, deberías configurarlo en x86 o x64 de acuerdo con sus requisitos en lugar de cualquier CPU.
Mi problema se resolvió después de cambiarlo a x86.
Respondido el 11 de Septiembre de 15 a las 11:09
1
Esto también puede suceder simplemente por tener múltiples marcos compatibles definido en el aplicación.config y obligar a la aplicación a ejecutarse en un marco .NET diferente al que mencionado primero en el archivo app.config.
Y también esto se activa cuando tiene los dos marcos mencionados disponibles en su sistema.
Como solución alternativa, abra el marco de destino que va a utilizar para la depuración en app.config
ej: si intenta ejecutar en .NET 4, el archivo de configuración debería tener algo similar a esto,
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
Respondido 30 ago 16, 11:08
1
En mi proyecto para C#, propiedad del proyecto->[Construir]->Objetivo de plataforma: cualquier CPU, y desmarque Preferir 32 bits para permitir que el compilador elija automáticamente.
Respondido el 03 de enero de 17 a las 01:01
1
También tuve este problema al ejecutar pruebas unitarias usando ReSharper en Visual Studio 2017 y lo arreglé con la siguiente configuración:
También puede cambiar la configuración de la prueba de ejecución de ReSharper: https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration
Respondido el 31 de enero de 18 a las 05:01
1
¡Disparo! Sabía de este problema. Pensé que estaba haciendo todo bien hasta que accidentalmente vi 'x86' en la ventana de salida de VS y fue entonces cuando me di cuenta de la causa. Perdí unos minutos en eso hoy.
La configuración en la ventana 'Publicar' se estableció en 'x86'; mientras que, en todas partes, era 'x64'.
Asegúrese de que esté sincronizado en el administrador de configuración, la configuración de publicación, la configuración de la solución y la configuración de IIS (si ese es su servidor web).
Además, tenga en cuenta que VS es una aplicación de 32 bits e IIS es de 64 bits. Las aplicaciones de 32 bits están deshabilitadas de forma predeterminada en IIS.
respondido 18 mar '19, 03:03
0
Puede ser un poco divertido, pero tuve el mismo problema con el código de trabajo normal. Agregué StreamWriter y StreamReader y dio ese error. La solución fue que tomé ese código entre paréntesis de comentarios, luego lo depuré y comenzó a funcionar nuevamente.
Respondido 21 Oct 15, 19:10
0
Si usa LibreOffice desde su programa a través de la integración cli .net como yo, tengo el mismo error. Uso la versión anterior de LibreOffice en el entorno de producción de mi PC. Instalé una versión más nueva que estaba en conflicto. Simplemente desinstale LibreOffice. Encontré la solución aquí .NET CLI: no se pudo cargar el archivo o ensamblado 'cli_cppuhelper'
Respondido 17 Abr '18, 09:04
0
En mi caso, faltaba una dependencia en el dll que lanzó esta excepción. Verifiqué con Dependency Walker, agregué el dll que faltaba y el problema se resolvió.
Más específicamente, de alguna manera corrompí mi opencv_core340.dll al agregarle accidentalmente palabras clave SVN y, por lo tanto, mi dll ya no pudo usarlo. Sin embargo, no creo que la solución a este problema dependa de si el dll está dañado o falta. Solo estoy agregando esto por el bien de dar información completa.
Respondido 31 Oct 18, 16:10
0
He detectado algo diferente a las otras respuestas. Alcanzar esta excepción en mi proyecto fue el resultado de una compilación corrupta. Sin hacer ningún cambio, solo obligando a reconstruir, se arregló.
Respondido el 30 de enero de 20 a las 08:01
0
Tuve el mismo problema. El proyecto B en mi caso era una biblioteca de clases .Net Core que tiene instalado un Nuget "Microsoft.Management.Infrastructure". El error fue que llamé a mi proyecto B "MI". Cambié el nombre del proyecto a otro y de repente todo volvió a funcionar.
respondido 24 mar '20, 10:03
-1
¿Está intentando ejecutar su archivo .exe desde el cmd? Este fue mi error. Simplemente ejecute el archivo .exe haciendo doble clic en él. Si es un SCD de .NET Core para Windows 8.1/Windows Server 2012 R2 x64.
respondido 27 mar '18, 08:03
-2
Mi máquina me mostró una actualización del BIOS y me preguntaba si eso tiene algo que ver con la aparición repentina de este error. Y después de que hice la actualización, el error se resolvió y la solución funcionó bien.
Respondido el 31 de enero de 17 a las 19:01
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# exception console-application badimageformatexception or haz tu propia pregunta.
Si tiene un historial de versiones en el repositorio, ¿podría verificar si hay algunas diferencias en los archivos csproj? - Steve
@Steve: según Mercurial, no hay cambios aparte de agregar referencias a nuevos archivos .cs - BlueRaja - Danny Pflughoeft
¿Obtiene el mismo comportamiento en otra máquina? ¿Cambió algo más en la máquina (por ejemplo, actualización de Windows, actualizaciones de dependencia, etc.)? - Mike Parkhill
¿Ha intentado revertir esos nuevos archivos .cs? - Mike Parkhill
esto funciono para mi............ stackoverflow.com/a/9419522/191403 - Som