“Se intentó cargar un progtwig 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 progtwig con un formato incorrecto. (Excepción de HRESULT: 0x8007000B)

Al principio, tenía mis proyectos configurados en la plataforma Cualquier CPU, así que los cambié a ambos x86, pero este error todavía está 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 progtwigs (que no tengo la fuente). Pensé que tal vez no estaba encontrando una dependencia, pero lo revisé y todos están allí. Además, ¿no arrojaría una DllNotFoundException en ese caso?

¿Que más puedo hacer? Y antes de decir “Use una DLL no administrada de 64 bits”, permítanme señalar que no hay ninguna. 😉

Si intenta ejecutar aplicaciones de 32 bits en IIS 7 (y / o equipo 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.

enter image description here

De alguna manera, la checkbox Construir en el Administrador de Configuración se había desmarcado para mi ejecutable, por lo que aún se estaba ejecutando con la antigua creación de Cualquier CPU. Después de que arreglé eso, Visual Studio se quejó de que no se podía depurar el ensamblado, pero eso se solucionó con un reinicio.

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

Propiedades del proyecto, pestaña de compilación

en Target de plataforma, seleccione x86 (o, más en general, la architecture para que coincida con la biblioteca a la que está enlazando)

Propiedades del proyecto, destino de la plataforma

¡Espero que esto ayude a alguien! 🙂

Acabo de tener este problema también. Intenté 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 “Comstackr” y luego haga clic en “Opciones de comstackción avanzada” en la parte inferior.

Verifique el menú desplegable “Target CPU”. Debe coincidir con la “Plataforma” que está construyendo. Es decir, si está construyendo “Cualquier CPU”, entonces “CPU de destino” debería decir “Cualquier CPU”. Revise todas sus plataformas haciéndolas activas y verifique esta configuración.

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

Si está utilizando Any CPU , puede encontrar este problema si la opción Prefer 32-bit está marcada:

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

enter image description here

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

Si está comstackndo a través del sistema del equipo y obteniendo este error, la pestaña del proceso de definición de comstackción tiene una configuración de “Plataforma MSBuild”. Si esto está configurado en “Auto”, puede experimentar este problema. Cambiarlo a “X86” también puede resolver el error.

En mi caso, estaba usando una DLL nativa en C #. Esta DLL dependía de otras dos DLL que faltaban. Una vez que esas otras DLL se agregaron todo funcionó.

También vea esta respuesta , que me solucionó el mismo problema.

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 comstackr en una máquina de 64 bits. Una solución que PARECE trabajar es alterar manualmente un carácter en la secuencia de la imagen CADA VEZ que el control de usuario o formulario se edita en el diseñador

  AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w 

Cambiar a

  AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w 

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

En mi caso, estoy usando un pequeño .exe que recarga 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 comstackción, elijo plataformas de destino x86

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 progtwig favorecía la DLL de 64 bits y hacía que fallara.

TL; DR Asegúrese de implementar solo archivos DLL de 32 bits en las pruebas.

Tengo este problema resuelto en la forma de ‘Windows’. Después de verificar todas mis configuraciones, limpiar la solución y reconstruirla, simplemente cierro la solución y la vuelvo a abrir. Luego funcionó, por lo que VS probablemente no se deshizo de algunas cosas durante la limpieza. Cuando las soluciones lógicas no funcionan, por lo general recurro a las ilógicas (o aparentemente ilógicas). Windows no me defrauda. 🙂

Pude solucionar este problema al hacer coincidir mi versión de comstackción con la versión de .NET en el servidor.

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

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

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

Basándose en la respuesta de @paibamboo

Él 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 (explícitamente lo buscó), pero tenía el mensaje de error en cuestión. Después de algunas horas, quitó la marca de la casilla y la revisó nuevamente. He aquí que el código ahora funcionaba con éxito.

Parece que hay dos lugares en los que se guarda el estado de esta caja que quedó fuera de sincronización. Al volver a revisarlo, lo sincronizó nuevamente.

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

En mi caso, era un contenido incorrecto del archivo. La DLL se descargó de la web, pero el contenido de la DLL era la página HTML: D Intente comprobar si se trata de un archivo binario, si parece la DLL correcta 🙂