Samstag, 17. April 2010

BadImageFormatException HRESULT: 0x800700C1

Windows7 macht eigentlich auch in der 64-Bit-Version Spaß und bisher hatte ich keinerlei Probleme beim Umstieg von 32 auf 64-Bit. Nun habe ich mir die VisualStudio 2010 Express installiert und erlebte nach erfolgreicher Konvertierung einer VisualStudio 2008 Solution eine Überraschung: Das Programm wurde zwar erfolgreich übersetzt - aber starten konnte ich es nicht. Stattdessen erhielt ich die folgende Exception:

System.BadImageFormatException was unhandled
  Message= BadImageFormatException . (Ausnahme von HRESULT: 0x800700C1)
  Source= …       bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Threading.ThreadHelper.ThreadStart()
  InnerException: …

Des Rätsels Lösung: Das VisualStudio-Projekt wurde im “AnyCpu” Modus kompiliert, welcher Windows7 64Bit dazu veranlasst die Applikation im 64-Bit-Modus zu starten. Leider hat das Projekt in diesem Fall eine Abhängigkeit zu einer Komponente die nicht 64-Bit fähig ist (in diesem Fall waren es die VisualStyles).

Da ich den Quellcode zu besagter Komponente nicht habe und diese nicht im “AnyCpu” Modus kompilieren kann, bleibt mir nur übrig, Windows7 dazu zu bewegen, die Applikation im 32-Bit-Modus zu starten.

Hierzu kann man den Compileschalter benutzen. Im VisualStudio kann man diesen praktischer Weise gleich für die ganze Solution setzen: Im Menü Build wählt man den Configuration Manager und kann dort unter Active Solution Platform von AnyCpu auf x86 wechseln. Gibt es keine x86 Konfiguration ist diese einfach durch einen Klick auf New und Copy settings from Any CPU zu erzeugen.

Welche Platform-Kombinationen funktionieren kann man auch hier nachlesen.