it-swarm.com.ru

Visual Studio C # - SQLite.Interop.dll не найден

В настоящее время я пытаюсь создать с помощью Visual Studio приложение C #, работающее с SQLite. Я установил SQLite для своей программы с NuGet, и в обозревателе решений появились три ссылки (System.Data.SQLite, System.Data.SQLite.EF6, System.Data.SQLite.Linq).

Когда я запускаю свое приложение в VS, все работает нормально. Однако всякий раз, когда я публикую его (с ClickOnce) и пытаюсь запустить приложение, оно вылетает со следующей ошибкой: System.DllNotFoundException: Невозможно загрузить DLL «SQLite.Interop.dll»: указанный модуль не может быть найден (Исключение из HRESULT: 0x8007007E)

После некоторых исследований я нашел эту dll в папке Debug и скопировал ее в папку, в которой создается версия моей программы «.exe» (после публикации и запуска «setup.exe»). Таким образом, приложение работает хорошо.

Но я не очень доволен этим решением, так как оно кажется очень грязным. Я не хочу, чтобы будущие пользователи делали это вручную при установке моего приложения!

Поэтому мой вопрос: что я могу сделать, чтобы убедиться, что эта DLL установлена ​​вместе с моей программой?

Примечание: я попробовал первый ответ из этого поста: не удалось загрузить dll sqlite interop dll WPF Но я, похоже, не работал для меня.

Спасибо !

5
Daneel

См. Использование предварительной загрузки собственной библиотеки на https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Вероятно, вам нужно включить папки x86 и x64 в другую библиотеку SQLite.

6
topshot

Я также сталкивался с подобной проблемой в моей среде Visual Studio 2017 и NET Framework 4.5 при следующих обстоятельствах:

Я разрабатываю надстройки для Outlook, используя ClickOnce для публикации и SQLite в качестве базы данных. После установки библиотеки SQLite в проект из NuGet она отлично работает в локальной среде, но на клиентском компьютере появляется сообщение об ошибке исключения «Невозможно загрузить DLL« SQLite.Interop.dll »».

Я сравнил эти две среды и обнаружил, что файл DLL «SQLite.Interop.dll» не был опубликован на клиентском компьютере, что можно увидеть на следующем рисунке . enter image description here

Я искал «SQLite.Interop.dll» в локальной среде и обнаружил, что он сохраняется в следующей папке «{project}\packages\System.Data.SQLite.Core.1.0.105.2\build \» для конкретного .Net FrameWork enter image description here

Итак, мое решение заключается в добавлении этих двух библиотек DLL в проект, после чего они могут быть опубликованы на клиентском компьютере с помощью ClickOnce.enter image description here

(Примечание: выбранная версия DLL должна совпадать с версией NET Framework в вашей среде.)

5
ukalpa

По умолчанию dll sqlite.interop.dll не поставляется с NuGet установкой SQLite. Для решения этой проблемы вам нужно добавить обе библиотеки DLL, x86 и x64 . На веб-сайте SQLite загрузите пакет, содержащий необходимые библиотеки DLL. Установите их в клиенте или скопируйте эти библиотеки в свой проект перед распространением.

5
Rafael

Если это устанавливаемый файл. Т.е., если вы создаете установочный файл, то вам нужно вручную добавить dll в основной выходной файл. 

Перейдите в свойства проекта установки и в настройках конфигурации выберите предварительные требования SQLLite, выберите (флажок) установить его из расположения проекта.

Посмотрите, решит ли это вашу проблему.

0
Prabhanjan_13

«Примечание: я попробовал первый ответ из этого поста: не удалось загрузить dll sqlite interop dll WPF, но я, похоже, не работал для меня».

Я тоже это попробовал, и наконец-то все заработало. Тем не менее, важным является:

  1. Вставьте sqlite.interop.dll как существующий элемент в корень проекта, который вы собираетесь построить.
  2. В свойствах этого файла убедитесь, что его обработка сборки выполняется как «контент» (а не как встроенный ресурс, как предлагается) и, конечно, всегда копируется в выходной каталог.

Надеюсь, это поможет побороть эту досадную ошибку.

0
mitch182