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

0voto

Conner Punkte 303

In meinem Fall hatte ich nicht das richtige Projekt als Startprojekt eingestellt. Ich ging zu den Lösungseinstellungen und wählte das richtige Startprojekt aus und es funktionierte

0voto

Allie Punkte 809

In meinem Fall trat der gleiche Fehler nach der Veröffentlichung auf. Ich hatte zuvor mit einer anderen Plattformkonfiguration veröffentlicht.

Die Lösung bestand darin, zuerst den Veröffentlichungsordner zu bereinigen, dann funktionierte es.

(alternativ können Sie die Option "Vorhandene Dateien löschen" auf true setzen)

0voto

crankedrelic Punkte 403

Ein weiterer Grund, der diese Ausnahme verursachen kann, ist das Fehlen der C++ Redistributables für die Zielplattform Ihrer Dll. Ich hatte eine harte Zeit herauszufinden, wenn auf einer VM zu testen.

0voto

Neo Punkte 433

Vergewissern Sie sich bei .net core, dass sich die Datei Ijwhost.dll im Ausgabeverzeichnis befindet. Manchmal wird sie nicht kopiert, was den Fehler verursacht. Siehe https://github.com/dotnet/runtime/issues/38231 und auch https://stackoverflow.com/a/58773266/9665729

0voto

amirfg Punkte 220

Bitte beachten Sie auch, dass die Version der verwendeten dll-Datei(en) (in meinem Fall "WebView2Loader.dll"), die in Gebrauch ist, sehr entscheidend ist. Ich hatte fast das gleiche Problem mit "Microsoft.WebView2.FixedVersionRuntime.101.0.1210.39.x64", als ich versucht habe, die WebView2 Komponente in den MMC Snap-Ins mit den Typen "HTMLView" oder "FormView" zu verwenden.

Ich habe die referenzierte dll-Datei einfach in einen für das Projekt zugänglichen Pfad kopiert (Sie können sie zum Testen einfach neben die Ausgabedateien Ihres Projekts legen), und dann hat der WebView2-Browser wie erwartet funktioniert. Die Fehlermeldungen von Microsoft waren manchmal (zumindest in meinem Fall) etwas irreführend und enthielten nicht genügend Informationen, die auf den Punkt gebracht wurden.

Ich erhielt "BadImageFormatException", die normalerweise auftritt, wenn Sie Plattformziele mischen (z. B. mit einer dll-Datei in X64 in einer Anwendung kompiliert, die für x86 oder umgekehrt gezielt) oder mischen nativen Code und .NET aber das war nicht mein Problem überhaupt. Ich hoffe, dies hilft jemandem, der vielleicht feststeckt.

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