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

596voto

bluwater2001 Punkte 7659

Wenn Sie versuchen, 32-Bit-Anwendungen auf IIS 7 (und/oder einem 64-Bit-Betriebssystem) auszuführen, erhalten Sie denselben Fehler. Klicken Sie also im IIS 7 mit der rechten Maustaste auf den Anwendungspool der Anwendungen, gehen Sie zu "Erweiterte Einstellungen" und ändern Sie "32-Bit-Anwendungen aktivieren" auf "WAHR".

Starten Sie Ihre Website neu und es sollte funktionieren.

enter image description here

154voto

David Brown Punkte 33972

Irgendwie ist die Bauen Sie Im Konfigurationsmanager war das Kontrollkästchen für meine ausführbare Datei nicht aktiviert, so dass sie noch mit dem alten Any-CPU-Build ausgeführt wurde. Nachdem ich das behoben hatte, beschwerte sich Visual Studio, dass es die Assembly nicht debuggen konnte, aber das war mit einem Neustart behoben.

111voto

Marvin Thobejane Punkte 1900

En Visual Studio , Rechtsklick auf Ihr Projekt -> Klicken Sie im linken Fenster auf die Schaltfläche Bauen Sie tab,

Project properties, build tab

unter Plattform Ziel wählen Sie x86 (oder allgemeiner die Architektur um mit der Bibliothek übereinzustimmen, zu der Sie verlinken)

Project properties, platform target

Ich hoffe, das hilft jemandem! :)

98voto

paibamboo Punkte 2676

Wenn Sie auf diesen Fehler stoßen, wenn Sie auf die Schaltfläche mit dem grünen Pfeil klicken, um die Anwendung auszuführen, aber dennoch die Anwendung in 64 Bit ausführen möchten. Sie können dies in VS 2013, 2015, 2017 und 2019 tun

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

Oder Sie können dies pro Projekt unter Projekteigenschaften > Web > Bitness tun IIS Express Bitness

58voto

Denis Punkte 11330

Ich hatte dieses Problem auch gerade. Habe alle Vorschläge hier ausprobiert, aber sie haben nicht geholfen.

Ich habe noch eine andere Sache gefunden, die das Problem für mich gelöst hat. Klicken Sie in Visual Studio mit der rechten Maustaste auf das Projekt und öffnen Sie "Eigenschaften". Klicken Sie auf die Registerkarte "Kompilieren" (oder "Erstellen") und dann auf "Erweiterte Kompilieroptionen" am unteren Rand.

Überprüfen Sie das Dropdown-Menü "Ziel-CPU". Sie sollte mit der "Plattform" übereinstimmen, die Sie bauen. Das heißt, wenn Sie "Any CPU" bauen, dann sollte unter "Target CPU" "Any CPU" stehen. Gehen Sie alle Ihre Plattformen durch, indem Sie sie aktivieren, und überprüfen Sie diese Einstellung.

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