Ich arbeite an einer .NET 3.5-Konsolenanwendung in C#, die eine VC++ - nicht verwaltete DLL verwendet. Es lief ohne Probleme, als ich vor ein paar Wochen daran arbeitete, aber ich komme heute darauf zurück und erhalte jetzt eine BadImageFormatException ("Es wurde versucht, ein Programm mit einem falschen Format zu laden. (Ausnahme von HRESULT:Alternative Ursache für BadImageFormatException in .NET Assembly?
Meine Entwicklungs-Workstation läuft mit 64-Bit-Windows 7, und ich arbeite ziemlich viel mit nicht verwaltetem Code, also habe ich sofort überprüft, ob die .NET-Assembly und die VC++ - Bibliothek x86-Ziele hatten.
Nur um sicherzugehen, ich gereinigt und die Bibliothek VC++ neu aufgebaut und die .NET-Assembly, ohne Erfolg.
Weder System etwas zu tun, ist besonders ungewöhnlich. die Bibliothek VC++ lädt eine binäre dat eine Datei und führt eine mathematische Verarbeitung ihres Inhalts durch. Die .NET-Assembly verfügt über die DllImports für die Bibliothek und etwas Code, um es zu verkabeln. Das alles hat vor ein paar Wochen funktioniert.
So bin ich jetzt gefragt, ob es eine andere Ursache für BadImageFormatException gibt, die weniger häufig ist als ein x86/x64-Konflikt, in dem ich möglicherweise laufen würde.
Danke.
BEARBEITEN: Ich bekomme den gleichen Fehler unabhängig von x86 oder x64-Modus, aber wenn auf 'Any CPU' gesetzt wird Ausführung über diesen Punkt, aber Ausführung bricht bei einem späteren Aufruf der VC++ Bibliothek ohne Ausnahme ab. Unabhängig davon, ob dies mit diesem Problem zusammenhängt, gibt es etwas, das "Irgendeine CPU" anders als x86 und x64 tut, was etwas Licht in dieses Thema bringen könnte?
Gibt es eine Chance, dass die ausgeführte Anwendung Zugriff auf eine x64-Version der VC++ - Bibliothek hat und versucht, diese stattdessen zu laden? Oder Ihre laufende Anwendung zielt möglicherweise auf AnyCPU und nicht auf x86? AnyCPU wird in 64-Bit geladen, wenn Sie in einer 64-Bit-Umgebung sind. – Anzurio
Gute Fragen. Ersteres scheint nicht der Fall zu sein. Ich habe versucht, das Projekt auf einen anderen Rechner zu kopieren, der noch nie eine Kopie der Bibliothek hatte, wobei ich darauf achtete, nur die x86-Version der Baugruppe zu kopieren. Das gleiche Problem ist auf der anderen Maschine aufgetreten. Die Anwendung ist definitiv auf x86 festgelegt. Aus Neugierde habe ich es so eingestellt, dass es in 'Any CPU' läuft. Wenn ich das tue, kommt es nach dem ersten Aufruf der VC++ - Bibliothek (wo es bei x86 oder x64 stirbt), aber die Ausführung wird bei einem späteren Aufruf der Bibliothek beendet. –
Führen Sie Dependency Walker x86 auf Ihrer EXE und dann auf Ihrer DLL. Ich hatte dieses Problem einmal nach dem Kopieren msvcr120.dll von System32 auf einer 64-Bit-Maschine. Oy! –