"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 Cualquier CPU, así que los cambié a x86, pero este error continúa ocurriendo. Esa es realmente la única solución que conozco para esto.
Las DLL no están corruptas ni nada por el estilo, porque puedo usarlas con otros programas (para los que no tengo la fuente). Pensé que tal vez no era encontrar dependencia, pero revisé y están todos. Además, ¿no sería un error DllNotFoundException
en ese caso?
¿Que más puedo hacer? Y antes de decir "Utilice en su lugar una DLL no administrada de 64 bits", permítame señalar que no existe ninguna. ;)
Si intenta ejecutar aplicaciones de 32 bits en IIS 7 (y/o en una máquina con sistema operativo de 64 bits), obtendrá el mismo error. Entonces, desde IIS 7, haga clic derecho en el grupo de aplicaciones de las aplicaciones, vaya a "configuración avanzada" y cambie "Habilitar aplicaciones de 32 bits" a "VERDADERO".
Reinicie su sitio web y debería funcionar.
De alguna manera, la casilla de verificación Generar en el Administrador de configuración no estaba marcada para mi ejecutable, por lo que todavía se estaba ejecutando con la versión anterior de Cualquier CPU. Después de solucionarlo, Visual Studio se quejó de que no podía depurar el ensamblaje, pero eso se solucionó reiniciando.