"Se intentó cargar un programa con un formato incorrecto" incluso cuando las plataformas son las mismas


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 Any CPU, así que los cambié a ambos a x86, pero este error todavía está ocurriendo. Esa es la única solución que conozco para esto.

Los DLL no son corruptos ni nada, porque puedo usarlos con otros programas (que no tengo la fuente). Pensé que tal vez no era encontrar una dependencia, pero lo comprobé y están todos allí. Además, ¿no lanzaría un DllNotFoundException en ese caso?

¿Qué más puedo hacer? Y antes de decir "Usa un DLL no administrado de 64 bits en su lugar", déjame señalar que no hay uno. ;)

Author: David Brown, 2010-01-08

15 answers

Si intenta ejecutar aplicaciones de 32 bits en IIS 7 (y/o máquina con sistema operativo de 64 bits), obtendrá el mismo error. Por lo tanto, desde 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.

introduzca la descripción de la imagen aquí

 489
Author: bluwater2001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 19:52:47

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

 119
Author: David Brown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-08 01:59:53

En Visual Studio , Haga clic con el botón derecho en su proyecto - > En el panel izquierdo, haga clic en la pestaña Build,

Propiedades del proyecto, pestaña construir

En Platform Target seleccione x86 (o más generalmente la arquitectura para que coincida con la biblioteca a la que está enlazando)

Propiedades del proyecto, destino de la plataforma

Espero que esto ayude a alguien! :)

 60
Author: Marvin Thobejane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-14 07:59:36

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

Encontré otra cosa para comprobar que lo arregló para mí. 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 avanzadas de compilación " en la parte inferior.

Compruebe el menú desplegable "CPU de destino". Debe coincidir con la "Plataforma" que está construyendo. Es decir, si está construyendo "Cualquier CPU", entonces " CPU de destino "debería decir"Cualquier CPU". Atravesar todas tus Plataformas activándolas y comprueba esta configuración.

 45
Author: Denis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-09 22:00:04

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. Puede hacer esto en VS 2013 o 2015

Vaya a: Herramientas > Opciones > Proyectos y Soluciones > Proyectos Web > Use la versión de 64 bits de IIS Express

 26
Author: paibamboo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-05 13:46:57

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

Asegúrese de que desmarqueesta opción en la pestaña de la propiedad del proyecto Build!

introduzca la descripción de la imagen aquí

 26
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-23 14:43:31

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

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

 8
Author: StingyJack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-05 13:55:56

En mi caso estaba usando un DLL nativo en C#. Esta DLL dependía de un par de otras DLL que faltaban. Una vez que se agregaron esos otros archivos DLL, todo funcionó.

 7
Author: Tomasz Stypich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-11 20:30:25

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

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

 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w

Cambiar a

 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w

Que es 00LjAuMC4w volver a 0yLjAuMC4w en el fin de la línea (00 volver a 0y)

 3
Author: Shaul Behr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:42

En mi caso, estoy usando una pequeña .exe que recarga las DLL referenciadas a través de Reflexión. 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 build, elijo target platfrom x86

 2
Author: asdf_enel_hak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-15 09:21:50

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

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

 2
Author: Mike Cluck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-07 19:30:07

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

 1
Author: user1771386,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-30 09:38:40

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

Hice doble clic en el .exe solo para ver qué pasaría y me dijo que instalara 4.5....

Así que bajé a 4.0 y funcionó!

Así que asegúrate de que tus versiones coincidan. Se ejecutó en mi caja de desarrollo bien, pero el servidor tenía una versión. NET más antigua.

 1
Author: Nateous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-16 21:58:48

En mi caso, el contenido del archivo era incorrecto. DLL se descargó de la web, pero el contenido de la DLL era página HTML: D Trate de comprobar si es un archivo binario, si parece como DLL correcto:)

 1
Author: Ludwo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-22 07:42:11

Basándose en 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 de trabajo tenía esta casilla marcada (la buscó explícitamente), pero tenía el mensaje de error en cuestión. Después de algunas horas desmarcó la casilla y la volvió a marcar. He aquí: El código ahora funcionó con éxito.

Parece, que hay dos lugares donde el estado de esta caja ist guardado que se convirtió fuera de sincronización. Un-y volver a comprobar que se sincronizó de nuevo.

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

 1
Author: MilConDoin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-16 14:42:53