563 Stimmen

"Es wurde versucht, ein Programm mit einem falschen Format zu laden", auch wenn die Plattformen identisch sind

Ich rufe Funktionen von einer 32-Bit-unmanaged DLL auf einem 64-Bit-System auf. Was ich bekomme ist:

BadImageFormatException: Es wurde versucht, ein Programm mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)

Zuerst hatte ich meine Projekte auf die Plattform Any CPU eingestellt, also habe ich sie beide auf x86 geändert, aber dieser Fehler tritt immer noch auf. Das ist wirklich die einzige Lösung, die ich für dieses Problem kenne.

Die DLLs sind nicht beschädigt oder so, denn ich kann sie mit anderen Programmen verwenden (für die ich den Quellcode nicht habe). Ich dachte, dass es vielleicht eine Abhängigkeit nicht findet, aber ich habe es überprüft und sie sind alle da. Außerdem, würde es nicht eine DllNotFoundException in diesem Fall?

Was kann ich sonst noch tun? Und bevor Sie sagen: "Verwenden Sie stattdessen eine nicht verwaltete 64-Bit-DLL", lassen Sie mich darauf hinweisen, dass es keine gibt ;)

8voto

StingyJack Punkte 18514

Das ist zwar nicht ganz das Thema dieses Beitrags, aber die Suche nach dieser Fehlermeldung brachte mich hierher.

Wenn Sie über das Teamsystem erstellen und diese Fehlermeldung erhalten, gibt es auf der Registerkarte "Build-Definitionsprozess" eine Einstellung "MSBuild-Plattform". Wenn diese auf "Auto" eingestellt ist, kann dieses Problem auftreten. Das Ändern der Einstellung in "X86" kann den Fehler ebenfalls beheben.

4voto

Ludwo Punkte 5883

In meinem Fall war es der falsche Inhalt der Datei. Die DLL wurde aus dem Internet heruntergeladen, aber der Inhalt der DLL war eine HTML-Seite :D Versuchen Sie zu prüfen, ob es sich um eine Binärdatei handelt, wenn sie wie eine richtige DLL aussieht :)

4voto

MilConDoin Punkte 654

Aufbauend auf der Antwort von @paibamboo

Er sagte: Gehen Sie zu: Tools > Optionen > Projekte und Lösungen > Webprojekte > Verwenden Sie die 64-Bit-Version von IIS Express

Mein Kollege hatte dieses Kästchen angekreuzt (er hat ausdrücklich danach gesucht), hatte aber die besagte Fehlermeldung. Nach einigen Stunden entfernte er das Häkchen und aktivierte es erneut. Und siehe da: Der Code lief nun mit Erfolg.

Es scheint, dass es zwei Stellen gibt, an denen der Zustand dieser Box gespeichert wird, die nicht mehr synchronisiert sind. Durch Aufheben und erneutes Prüfen wurde es wieder synchronisiert.

Frage an sachkundigere Benutzer: Gab es letzte Woche ein Update oder etwas anderes (für VS 2015), das die Synchronisierung der Zustände aufhob?

3voto

Shaul Behr Punkte 35201

Siehe auch diese Antwort die das gleiche Problem für mich gelöst hat.

Geschrieben von Luis Mack am 5/12/2010 um 8:50 AM Ich habe das gleiche Problem gefunden, nur für ein bestimmtes Projekt beim Kompilieren auf einer 64-Bit-Maschine. Eine Lösung, die zu funktionieren scheint, ist die manuelle Änderung eines Zeichens im Bildstrom JEDESMAL, wenn das Benutzerelement oder Formular im Designer bearbeitet wird

 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w

Wechseln zu

 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w

Das heißt 00LjAuMC4w zurück zu 0yLjAuMC4w am Ende der Zeile (00 zurück auf 0y)

2voto

Nateous Punkte 757

Ich konnte dieses Problem beheben, indem ich meine Build-Version mit der .NET-Version auf dem Server abglich.

Ich habe auf die .exe-Datei doppelgeklickt, um zu sehen, was passieren würde, und sie sagte mir, ich solle 4.5 installieren....

Also habe ich auf 4.0 heruntergestuft und es hat funktioniert!

Stellen Sie also sicher, dass Ihre Versionen übereinstimmen. Es lief auf meiner Dev-Box gut, aber der Server hatte eine ältere .NET-Version.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X