CorFlags.exe, System.Data.SQLite.dll и BadImageFormatException - PullRequest
4 голосов
/ 27 января 2011

Запуск CorFlags.exe против System.Data.SQLite.dll из http://sqlite.phxsoftware.com/ дает следующий вывод.

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 24
ILONLY    : 0
32BIT     : 0
Signed    : 1

Как видите, 32BIT не указано и PE равно PE32. Согласно Переход от разработки 32-разрядных к 64-разрядным приложениям на .NET Framework означает, что сборка Любой ЦП . Однако использование сборки из 64-разрядного приложения приводит к ошибке:

System.BadImageFormatException: может не загружать файл или сборку 'System.Data.SQLite' или один из его зависимостей. Была сделана попытка загрузить программу с неверным формат. Имя файла: 'System.Data.SQLite'

Если CorFlags.exe сообщает Любой ЦП , почему возникает исключение? Неправильно ли помечена сборка с 32BIT: 0?

Я знаю, что также доступна 64-битная версия, я просто хочу знать, что является причиной ошибки.

Ответы [ 2 ]

9 голосов
/ 29 января 2011

Файл System.Data.SQLite.dll, который вы используете, является сборкой смешанного режима , что означает, что он не является чистым .NET-кодом (см. Также флаг «ILONLY: 0»),он также содержит неуправляемый машинный код, который не может быть «Любой процессор».Таким образом, поскольку библиотека DLL содержит 32-битный собственный код, ее можно загрузить только в 32-битный процесс, в противном случае возникает исключение BadImageFormatException.

1 голос
/ 07 февраля 2011

Если вы загружаете файл SQLite-1.0.66.0-binaries.zip с sourceforget.net, он содержит каталог bin / x64 с файлом System.Data.SQLite.dll, который вам нужен.

Этотакже имеется каталог Itanium ..

URL :

http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...