name keywords ejemplos description .net 64bit pinvoke 32-bit badimageformatexception

.net - ejemplos - meta name keywords



“Se intentó cargar un programa con un formato incorrecto” incluso cuando las plataformas son las mismas (15)

Acabo de tener este problema también. Probé todas las sugerencias aquí, pero no ayudaron.

Encontré otra cosa para comprobarlo que me lo arregló. En Visual Studio, haga clic derecho en el proyecto y abra "Propiedades". Haga clic en la pestaña "Compilar" y luego haga clic en "Opciones de compilación avanzadas" en la parte inferior.

Compruebe el menú desplegable "CPU de destino". Debe coincidir con la "Plataforma" que estás construyendo. Es decir, si está creando "Cualquier CPU", entonces "CPU de destino" debería decir "Cualquier CPU". Revise todas sus plataformas activándolas y verifique esta configuración.

Estoy llamando a funciones desde una DLL no administrada de 32 bits en un sistema de 64 bits. Lo que obtengo es:

BadImageFormatException: se intentó cargar un programa con un formato incorrecto. (Excepción de HRESULT: 0x8007000B)

Al principio, tenía mis proyectos configurados en la plataforma de cualquier CPU, así que cambié ambos a x86, pero este error sigue ocurriendo. Esa es realmente la única solución que conozco para esto.

Las DLL no están dañadas ni nada, porque puedo usarlas con otros programas (que no tengo la fuente para). Pensé que tal vez no estaba encontrando una dependencia, pero revisé y están todos allí. Además, ¿no lanzaría una DllNotFoundException en ese caso?

¿Que más puedo hacer? Y antes de decir "Use un DLL no administrado de 64 bits en su lugar", permítame señalar que no hay uno. ;)


De alguna manera, la casilla de verificación Generar en el Administrador de configuración había sido desactivada para mi ejecutable, por lo que todavía se estaba ejecutando con la antigua compilación de Cualquier CPU. Después de que solucioné eso, Visual Studio se quejó de que no podía depurar el ensamblaje, pero que se solucionó con un reinicio.


En Visual Studio , haga clic derecho en su proyecto -> En el panel izquierdo, haga clic en la pestaña Generar ,

en Platform Target, seleccione x86 (o más generalmente la arquitectura que coincida con la biblioteca a la que se está vinculando)

¡Espero que esto ayude a alguien! :)


En mi caso fue contenido incorrecto del archivo. DLL se descargó de la web, pero el contenido de la DLL era la página HTML: D Intente verificar si es un archivo binario, si parece que es la DLL correcta :)


En mi caso, estaba ejecutando pruebas a través de MSTest y descubrí que estaba implementando una DLL de 32 bits y de 64 bits en el directorio de prueba. El programa estaba favoreciendo la DLL de 64 bits y causando que fallara.

TL; DR Asegúrese de que solo implementa DLL de 32 bits en las pruebas.


En mi caso, estaba usando una DLL nativa en C #. Esta DLL dependía de un par de otras DLL que faltaban. Una vez que esas otras DLLs fueron agregadas todo funcionó.


En mi caso, estoy usando un pequeño .exe que vuelve a cargar los archivos DLL a los que se hace referencia a través de Reflection. Así que solo hago estos pasos que me salvan el día:

Desde las propiedades del proyecto en el explorador de soluciones, en la pestaña de compilación, elijo la plataforma de destino x86


Partiendo de la respuesta de @paibamboo.

Dijo: Vaya a: Herramientas> Opciones> Proyectos y soluciones> Proyectos web> Use la versión de 64 bits de IIS Express

Mi compañero tenía esta casilla marcada (la buscó explícitamente), pero tenía el mensaje de error en cuestión. Después de algunas horas, desmarca la casilla y la vuelve a marcar. He aquí que: el código ahora funcionó con éxito.

Parece que hay dos lugares donde se guarda el estado de este cuadro que se desincronizó. Des- y volviéndolo a comprobar lo sincronizamos de nuevo.

Pregunta para usuarios más conocedores: ¿Hubo una actualización o algo la semana pasada (para VS 2015) que desincronizó los estados?


Pude solucionar este problema haciendo coincidir mi versión de compilación con la versión .NET del servidor.

Hice doble clic en el archivo .exe solo para ver qué sucedería y me dijo que instale 4.5 ...

¡Así que bajé a 4.0 y funcionó!

Así que asegúrese de que sus versiones coinciden. Funcionó en mi caja de desarrollo bien, pero el servidor tenía una versión anterior de .NET.


Si encuentra este error al hacer clic en el botón de flecha verde para ejecutar la aplicación, pero aún desea ejecutar la aplicación en 64 bits. Puedes hacerlo en VS 2013, 2015 y 2017.

Vaya a: Herramientas> Opciones> Proyectos y soluciones> Proyectos web> Usar la versión de 64 bits de IIS Express


Si está utilizando Cualquier CPU , puede encontrar este problema si la opción Preferir 32 bits está marcada:

¡Asegúrese de desmarcar esta opción en la pestaña Construir de la propiedad del proyecto !


Si intenta ejecutar aplicaciones de 32 bits en IIS 7 (y / o una máquina con sistema operativo de 64 bits), obtendrá el mismo error. Entonces, desde el IIS 7, haga clic derecho en el grupo de aplicaciones de las aplicaciones y vaya a "configuración avanzada" y cambie "Habilitar aplicaciones de 32 bits" a "VERDADERO".

Reinicie su sitio web y debería funcionar.


También vea esta respuesta , que resolvió el mismo problema para mí.

Publicado por Luis Mack el 5/12/2010 a las 8:50 AM He encontrado el mismo problema, solo para un proyecto específico al compilar en una máquina de 64 bits. Una solución que parece funcionar es alterar manualmente un carácter en el flujo de imágenes CADA VEZ que el control de usuario o el formulario se edita en el diseñador

AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w

Cambiar a

AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w

Eso es 00LjAuMC4w de nuevo a 0yLjAuMC4w al final de la línea (00 de nuevo a 0y)


Tengo este problema resuelto en la forma de ''Windows''. Después de revisar todas mis configuraciones, limpiar la solución y reconstruirla, simplemente la cierro y la reabrí. Luego funcionó, por lo que VS probablemente no se deshizo de algunas cosas durante la limpieza. Cuando las soluciones lógicas no funcionan, generalmente recurro a soluciones ilógicas (o aparentemente ilógicas). Windows no me decepciona. :)


Un poco fuera de tema para esta publicación, pero la búsqueda de este mensaje de error me trajo aquí.

Si está compilando a través del sistema de equipo y obtiene este error, la pestaña del proceso de definición de compilación tiene una configuración de "Plataforma MSBuild". Si se establece en "Auto", puede experimentar este problema. Cambiarlo a "X86" también puede resolver el error.