На некоторых компьютерах приложение не может загрузить файл sqlite dll - PullRequest
6 голосов
/ 25 октября 2009

Я написал приложение, которое использует sqlite, и оно прекрасно работает на большинстве систем. Он написан на C #, и единственная некаркасная сборка - это sqlite, которая включена в System.Data.SQLite.dll.

Я развернул его одинаково на всех машинах (скопируйте, вставив exe-файл, файл базы данных и файл System.Data.SQLite). Он отлично работает на всех моих компьютерах и на большинстве компьютеров, которые я пробовал.

Но тогда у меня есть сообщения, что для некоторых людей выдается следующее исключение:

Не удалось загрузить файл или сборку 'System.Data.SQLite, версия = 1.0.65.0, Culture = нейтрально, PublicKeyToken = db937bc2d44ff139 'или одна из его зависимостей. Попытка был сделан, чтобы загрузить программу с неверный формат.

Теперь я убедился, что файл dll находится в той же папке, что и exe-файл приложения. Это та же DLL, с той же версией, которая указана в сообщении об исключении выше.

Я был действительно смущен этим, поэтому я создал новую виртуальную машину, установил на нее Windows 7 Professional и просто скопировал, вставил файлы, и все заработало. Так что, если он работает на свежих окнах, я не могу представить, чего не хватает другим ПК ...

Примечание. На двух машинах, на которые проект выдал исключение, также запущена профессиональная версия Windows 7.

Я был бы очень признателен за любую помощь в этом, потому что я только что из идей ...

Ответы [ 3 ]

12 голосов
/ 25 октября 2009

Вот одна из возможностей: разница между работающими и неработающими машинами 32-битными и 64-битными? Вы строите для «Любого процессора», когда вы должны собирать только битность вашей внешней DLL?

1 голос
/ 25 октября 2009

Вы проверили, является ли целевая система 64-битной или 32-битной?

Возможно, для одной из ваших зависимостей требуется 32-разрядная версия Windows. Чтобы решить эту проблему, вы можете указать цель платформы в свойствах вашего проекта C #: выберите x86 вместо Any CPU.

1 голос
/ 25 октября 2009

Возможно, что на компьютерах, которые выдают исключение, установлена ​​64-разрядная версия Windows, а ваша программа использует конфигурацию AnyCPU. DLL-библиотека System.Data.SQLite - это двуличный зверь: управляемая часть и нативная часть. Возможно, за исключение отвечает нативная часть.

См. этот вопрос для получения дополнительной информации.

...