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

46voto

Drew Noakes Punkte 282438

Wenn Sie Folgendes verwenden Jede CPU können Sie auf dieses Problem stoßen, wenn die 32-Bit bevorzugen Option aktiviert ist:

Stellen Sie sicher, dass Sie abhaken. diese Option in der Eigenschaft des Projekts Bauen Sie tab!

enter image description here

19voto

Tomasz Stypich Punkte 161

In meinem Fall habe ich eine native DLL in C# verwendet. Diese DLL hing von einigen anderen DLLs ab, die nicht vorhanden waren. Sobald diese anderen DLLs hinzugefügt wurden, funktionierte alles.

10voto

Joe Punkte 221

Wir hatten ein ähnliches Problem und konnten es beheben, indem wir das Plattformziel auf x86 gesetzt haben. Project Properties-> build

10voto

Mani Punkte 307
  1. Gehen Sie zu: Extras Optionen Projekte und Lösungen Webprojekte Verwenden Sie die 64-Bit-Version von IIS Express.
  2. Ändern Sie die folgenden Einstellungen für das Webservice-Projekt:

enter image description here

9voto

luviktor Punkte 2170

Mit Visual Studio 2019 hatte ich ein ähnliches Problem, als ich Tests (MSTest direkt aus VS) ausführen wollte. In meinem Fall hatte ich nur eine x64 native DLL und ich erhielt diese Fehlermeldung. Zuerst dachte ich, es ist, weil Visual Studio als x86 läuft, aber diese Seite half mir, das Problem zu lösen:

Unit-Test als 64-Bit-Prozess ausführen

Dort heißt es

  1. Setzen Sie Ihre Projekte auf eine beliebige CPU
  2. Explizite Definition der Prozessorarchitektur

Ich habe beides gemacht (ich habe explizit x64 eingestellt) und dann haben meine Tests angefangen zu funktionieren.

Set processor architecture explicitly to x64

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