Corflags.exe, system.data.sqlite.dll und badimageformatexception
-
25-10-2019 - |
Frage
Betrieb Corflags.exe gegen System.Data.SQLite.dll
aus http://sqlite.phxsoftware.com/ erzeugt die folgende Ausgabe.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 24
ILONLY : 0
32BIT : 0
Signed : 1
Wie du sehen kannst, 32BIT
ist nicht spezifiziert und PE
ist gleich PE32
. Entsprechend Wechsel von 32-Bit auf 64-Bit-Anwendungsentwicklung auf .NET Framework, Dies bedeutet, dass die Baugruppe ist Jede CPU. Die Verwendung der Montage aus einer 64 -Bit -Anwendung führt jedoch zu einem Fehler:
System.BadimageFormatexception: Es konnte keine Datei oder Montage 'System.Data.sqlite' oder eine seiner Abhängigkeiten geladen werden. Es wurde versucht, ein Programm mit einem falschen Format zu laden. Dateiname: 'System.data.sqlite' '
Wenn corflags.exe berichtet Jede CPU, warum tritt die Ausnahme auf? Ist die Baugruppe falsch mit markiert mit 32BIT: 0
?
Ich weiß, dass auch eine 64-Bit-Version verfügbar ist. Ich möchte nur wissen, was den Fehler verursacht.
Lösung
Die von Ihnen verwendete System.data.sqlite.dll -Datei ist a gemischte Mode-Montage, Dies bedeutet, dass es sich nicht um einen reinen .NET -Code handelt (siehe auch das Flag „Ilonly: 0“), es enthält auch nicht verwalteten Maschinencode, der nicht „eine CPU“ sein kann. Da die DLL 32-Bit-native Code enthält, kann er nur in einen 32-Bit-Prozess geladen werden, ansonsten tritt ein badimageFormatexception auf.
Andere Tipps
Wenn Sie die herunterladen SQLite-1.0.66.0-binaries.zip
Datei von SourceForget.net dann enthält dies a bin/x64 Verzeichnis mit a System.Data.SQLite.dll
Datei, wonach Sie suchen.
Es hat auch ein Itanium -Verzeichnis.
Das URL ist:
http://sourceforge.net/projects/sqlite-dotnet2/files/sqlite%20for%20ado.net%202.0/1.0.66.0/