Библиотека Sqlite interop не нашла указанный модуль

Обновлено: 04.07.2024

Сегодня я хотел бы рассказать о решении странной проблемы, с которой я столкнулся при развертывании SQLite.

"Не удалось загрузить файл или сборку System.Data.SQLite.dll или одну из ее зависимостей".

Для решения этой проблемы я испробовал множество способов, но так и не решил свою проблему. Что я сделал, чтобы решить эту проблему, так это то, что я установил версию sqlite-netFx40-setup-bundle-x86-2010-1.0.89.0, а затем скопировал System.Data.SQLite.dll в папку моего проекта и передал эту dll моему проект. Это решило проблему на моем компьютере для разработки, но когда я пошел на развертывание, я получил еще одну ошибку, похожую на эту,

«Не удалось загрузить DLL «SQLite.Interop.dll»: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)”

Это показывает, что собственная сборка взаимодействия требуется либо для архитектуры x86, либо для архитектуры x64. Поскольку «System.Data.SQLite.dll» представляет собой сборку смешанного режима, я подозревал, что она автоматически загрузит собственный код. Но мне действительно не повезло!! Причиной этого может быть то, что конкретная сборка смешанного режима предназначена либо для x86, либо для x64, а не для обоих. Во всяком случае, я действительно не знаю, что было точной причиной этой проблемы. Попробовав разными способами, я наконец нашел решение. Вот оно.

Сначала нам нужно установить SQLite, и в моем случае я установил его из галереи NuGet. Для этого вы можете выполнить шаги, указанные ниже:

Перейдите в ИНСТРУМЕНТЫ->Диспетчер пакетов библиотек->Консоль диспетчера пакетов Visual Studio.

Image

Затем выполните команду Install-Package System.Data.SQLite

Image

Теперь в вашем проекте есть две папки x86 и x64, под этой папкой вы найдете файлы «SQLite.Interop.dll».

Image

Теперь перейдите в окна свойств этих dll и установите для действия сборки содержимое, а для Копировать в выходной каталог — Копировать всегда.

Image

Например, вам также нужно изменить настройки свойств для «System.Data.SQLite.dll».

Вот и все. Теперь создайте свое приложение. Вы готовы к развертыванию и видите, что он отлично работает и на вашем клиентском компьютере.


Дата регистрации гиперактивного участника, январь 2019 г. Сообщений: 310

[РЕШЕНО] Не удалось загрузить DLL «SQLite.Interop.dll» вне VS

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

Пожалуйста, мне нужно руководство по решению этой проблемы!

.NUT Дата регистрации: май 2005 г. Местоположение: Сидней, Австралия Сообщений: 108 076

Вам необходимо развернуть указанную DLL вместе с вашим приложением. SQLite не требует сервера, как SQL Server, или установки ядра базы данных, как это делает Access, потому что файлы, необходимые для взаимодействия с базой данных, должны быть развернуты вместе с приложением.


Дата регистрации гиперактивного участника, январь 2019 г. Сообщений: 310

Вы имеете в виду, что я добавляю его как ссылку на свое решение? потому что я нашел пару таких файлов в папках Debug\x86 и Debug\x64. Это те, которые я должен добавить?

.NUT Дата регистрации: май 2005 г. Местоположение: Сидней, Австралия Сообщений: 108 076


Дата регистрации гиперактивного участника, январь 2019 г. Сообщений: 310

Я только что перепробовал так много «исправлений» своей проблемы:

Я попытался выгрузить свой проект и добавить следующие строки в файл csproj:


затем я попробовал это:

Я также переустановил: System.Data.SQLite.Core и System.Data.SQLite

Я тоже пробовал это:
В обозревателе решений щелкните правой кнопкой мыши мой проект: ДОБАВИТЬ -> Существующий элемент. Затем измените поиск на Все файлы (*.*) и откройте Sqlite.Interop.dll. И получить их из: bin\debug\x86 (или x64)

и т. д. в конце концов, ничего из вышеперечисленного не сработало.

Возможно, я не понял с самого начала, что вы имели в виду под "включить это в свой установщик"
Как именно я могу включить эти файлы в свой установщик? Я запутался.
Кроме того, есть две версии (x86 и x64), так как моя целевая платформа - 64-битная, я предполагаю, что мне нужно включить только версию x64.

Дата присоединения к PowerPoster: сентябрь 2005 г. Местоположение Модесто, Калифорния. Сообщений 4845

После выполнения шагов я хотел запустить Мастер модели данных сущности, выбрал Code First из базы данных, на следующем сайте новое соединение, есть SQLite Provider (Simple for EF6 by ErikEJ). Я ввел действительную строку подключения и нажал Enter. Я немедленно получаю сообщение об ошибке: «Невозможно загрузить DLL «SQLite.Interop.dll». Указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)».
После этого я проверил, отсутствуют ли dll, однако я нашел их в своем выходном пути в папке x64 или x86.

Я что-то пропустил или мне нужно сделать что-то другое?

Этапы воспроизведения

Создайте новый проект Visual Studio и запустите приведенное выше руководство.

Дополнительные технические подробности

Версия 4.7.669.0 – 1 490 146 загрузок

SQL Server Compact 4.0 в GAC — Да — 4.0.8876.1
SQL Server Compact 4.0 DbProvider — Да

Поставщик DDEX для SQL Server Compact 4.0 — нет
Поставщик DDEX для SQL Server Compact 4.0 Simple — да

SQL Server Compact 3.5 в GAC — нет
SQL Server Compact 3.5 DbProvider — нет

Поставщик DDEX для SQL Server Compact 3.5 — нет

Поставщик Sync Framework 2.1 SqlCe 3.5 — нет

Ядро базы данных: SQLite

Visual Studio или версия SSMS: 15.9.20

Текст был успешно обновлен, но возникли следующие ошибки:

Прокомментировал Брезельманн 26 февраля 2020 г.

Везде должна быть одинаковая установка. В своем решении я использовал Nuget для получения единственной доступной версии System.Data.SQLite (v. 1.0.112).
Я скачал и установил последнюю сборку набора инструментов и использовал sqlite-netFx46-setup-bundle-x64-2015-1.0.112.0.exe для установки Sqlite в GAC.

мой app.config выглядит так:

Я использую Entity Framework 6.3.0 и Visual Studio Professional 15.9.20.

Вы видите что-то, что я сделал неправильно, основываясь на записи вики, или как это должно быть сделано?

ErikEJ прокомментировал 26 февраля 2020 г.

Ах, мне, наверное, нужно обновить до 112, или вы можете понизить до .110

Прокомментировал Брезельманн 26 февраля 2020 г.

Похоже на хороший план. Какое решение вы предпочитаете и сколько времени займет изменение?

ErikEJ прокомментировал 26 февраля 2020 г.

Что ж, самым быстрым решением для вас было бы перейти на версию .110, если вы можете это сделать.

Прокомментировал Брезельманн 26 февраля 2020 г.

Вы правы, самым быстрым решением для меня было бы немедленно понизить версию до 110 и просто использовать это. Однако, поскольку я нахожусь в самом начале своего развития, я мог бы немного отложить проблемы с моей базой данных и сначала написать репозитории Entity Framework и бизнес-сервисы, прежде чем вернуться к базе данных. Это избавило бы меня от необходимости правильно удалять все компоненты sqlite для 112 из проекта и машины, а затем переустанавливать 110. Вот почему я спросил, не могли бы вы внести изменения, чтобы узнать, какими будут мои следующие шаги.

В любом случае большое спасибо за вашу быструю и большую помощь в этом вопросе.

ErikEJ прокомментировал 26 февраля 2020 г.

ErikEJ прокомментировал 26 февраля 2020 г.

Я также принимаю запросы на вытягивание

ErikEJ прокомментировал 26 февраля 2020 г.

ErikEJ прокомментировал 27 февраля 2020 г.

Последняя сборка обновлена ​​до 1.0.112

Прокомментировал Брезельманн 28 февраля 2020 г.

и информация из инструмента:
Версия 4.7.670.0 - 1.490.146 загрузок

SQL Server Compact 4.0 в GAC — Да — 4.0.8876.1
SQL Server Compact 4.0 DbProvider — Да

Поставщик DDEX для SQL Server Compact 4.0 — нет
Поставщик DDEX для SQL Server Compact 4.0 Simple — да

SQL Server Compact 3.5 в GAC — нет
SQL Server Compact 3.5 DbProvider — нет

Поставщик DDEX для SQL Server Compact 3.5 — нет

Поставщик Sync Framework 2.1 SqlCe 3.5 — нет

Error

Я также проверил выходную папку и обнаружил папки x86 и x64 с SQlite.Interop.dll внутри. Затем я попытался (для полноты картины) скопировать его прямо в выходную папку, рядом с моей dll (не сработало, та же ошибка) и после этого прямо рядом с файлом базы данных, который лежит в корне моего каталог решений.
Для полноты это ошибка, которую я всегда получал:

Однако теперь все версии одинаковы. Это означает, что провайдер находится на 112, экземпляр sqlite находится на 112, а все остальное должно быть таким же, как в вашем руководстве (поправьте меня, если я ошибаюсь)
Любые другие предложения?
Может ли помочь чистая установка Windows/Visual Studio (например, путем проверки отсутствия странных записей в каких-либо файлах конфигурации)?

ErikEJ прокомментировал 28 февраля 2020 г.

Проверили ли вы версию в конфигурации вашего компьютера - в основном просмотрели вики-пост предложение за предложением?

Прокомментировал Брезельманн 28 февраля 2020 г.

а здесь 64-битная:

Я (надеюсь 😄) следил за постом в вики предложение за предложением. Я сделал следующее в этом порядке:

  1. Установил набор инструментов по ссылке https://github.com/ErikEJ/SqlCeToolbox/wiki/Release-notes
  2. Установил этот файл: sqlite-netFx46-setup-bundle-x64-2015-1.0.112.0.exe, выполнив полную установку и проверив gac (у меня не было возможности установить компоненты для 2015 года, вероятно, потому, что я запускаю 2017)
  3. Перезапустил Windows и, следовательно, VS
  4. Проверил страницу об инструменте в VS (см. мой первый пост)
  5. Все равно вручную проверил GAC (выглядел так же, как и выше, за исключением части Деварта)
  6. Добавлена ​​строка провайдера в app.config
  7. установил System.Data.SQLite с Nuget (консоль диспетчера пакетов не использовалась)
  8. Создать проект
  9. Проверил файл app.config (выглядел точно так же, как и в приведенном выше примере)
  10. Хотелось добавить модель данных ADO.Net в корень моей библиотеки классов.
    10.1 Сначала выбран код из базы данных.
    10.2 Выбранное новое соединение.
    10.3 Выбранный поставщик SQLite (ErikEJ, Simple for EF6).
    10.4 Добавлена ​​строка подключения следующего формата: Data Source="абсолютный путь к ConfigDb.sqlite".
    10,5 нажали "Проверить подключение" и получили указанную выше ошибку

Я пропустил что-то очевидное?

ErikEJ прокомментировал 28 февраля 2020 г.

Вы пробовали использовать VS 2019?

Прокомментировал Брезельманн 28 февраля 2020 г.

В настоящее время это не вариант для моего VS Professional 2017, но я могу настроить виртуальную машину с сообществом VS 2019, чтобы проверить, поможет ли это.

ErikEJ прокомментировал 28 февраля 2020 г.

На данный момент это, вероятно, поможет

Прокомментировал Брезельманн 28 февраля 2020 г.

SQL Server Compact 4.0 в GAC — нет
SQL Server Compact 4.0 DbProvider — нет

Поставщик DDEX для SQL Server Compact 4.0 — нет
Поставщик DDEX для SQL Server Compact 4.0 Simple — да

SQL Server Compact 3.5 в GAC — нет
SQL Server Compact 3.5 DbProvider — нет

Поставщик DDEX для SQL Server Compact 3.5 — нет

Поставщик Sync Framework 2.1 SqlCe 3.5 — нет

После небольшого исследования я продолжил манипулировать файлом machine.config в соответствии с инструкциями.
При первом открытии файла machine.config они выглядели так (хотя sqlite было приказано добавить себя в GAC):

Я заменил его строкой, приведенной в вики-сообщении, скопировав ее оттуда. Изменил его как для 32-битной, так и для 64-битной версии. Я использовал PMC для добавления System.Data.SQLite в библиотеку и выполнил успешную сборку. package.config выглядит так:

и app.config следующим образом:

После этого я запустил Entity Data Model Wizard и получил исключение, что VS не может загрузить DLL 'SQLite.Interop.dll'. Выходная папка содержит необходимые папки x64 и x86 с SQLite.Interop.dll. Я снова вставил dll в корень моего проекта, решение и выходной путь, но ошибка осталась прежней.

Для этого теста я использовал Visual Studio Community 16.4.5. Надеюсь, вы сможете что-нибудь с этим придумать 😄

System.EntryPointNotFoundException: не удалось найти точку входа sqlite3_open_interop в библиотеке DLL SQLite.Interop.dll.

Эта ошибка возникает для любой базы данных, которую я пытаюсь использовать. Каковы возможные причины этой ошибки?
Заранее спасибо.

Ответы

Эдди Д

Эдди Д. Редгейт › Сообщений: 1712 Rose Gold 5

Здравствуйте, спасибо за ваше сообщение на форуме.

Какую версию SQL Search вы используете?

Для вас создан запрос в службу поддержки. Я отправлю личное сообщение с деталями обращения в службу поддержки.

Я только что нашел обходной путь, но он не очень практичен.

Я удалил весь пакет SQL Toolbelt и переустановил только SQL Search, и это сработало. Приложение правильно проиндексировало базы данных, и описанная ранее ошибка не возникла.

Эдди Д

Эдди Д. Редгейт › Сообщений: 1712 Rose Gold 5

Спасибо за ответы.

Согласен, не очень практичное решение. Вы переустанавливали какие-либо другие приложения SQL Toolbelt? Если ответа еще нет, попробуйте переустановить SQL Compare и SQL Data Compare? Если вы можете продолжать использовать поиск SQL, не могли бы вы попробовать SQL Prompt?

У меня была точно такая же проблема. У меня были установлены SQL Compare, SQL Data Compare, SQL Prompt и SQL Search, и возникла проблема с SQL Search.

Я удалил SQL Compare, SQL Data Compare и SQL Prompt. (Не удалял поиск SQL). Поиск SQL работал.

Это происходит из-за того, что SQL Prompt использует System.Data.SQLite 1.0.85.0, который конфликтует с поиском SQL 1.0.110.0, что приводит к сбою индексации, так как не удается найти нужную SQLite.Interop.DLL.

Вы можете решить эту проблему, заменив System.Data.SQLite.dll в C:\ProgramData\Red Gate\SQL Search\Source более старой версией (1.0.85.0, скопированной из папки SQL Prompt 9, C:\Program Файлы (x86)\Red Gate\SQL Prompt 9).

Таким образом, вы можете одновременно запускать подсказку и поиск.

У меня возникла аналогичная проблема с расширением Visual Studio 2017 (VS 2017). Ошибка была:

System.DllNotFoundException: невозможно загрузить DLL «SQLite.Interop.dll»: указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)

Версия поиска SQL: 3.2.4.2262. Я заметил, что в каталоге установки расширения нет указанной SQLite.Interop.dll. Каталог установки: «C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\001ss942.rgs».

В итоге я установил версию SQL Search для SQL Server Management Studio (SSMS) (также 3.2.4.2262). Затем я скопировал файл SQLite.Interop.DLL (версия 1.0.110.0) из «C:\ProgramData\Red Gate\SQL Search\Source» в указанный выше каталог Visual Studio. Это решило мою проблему.

Эдди Д

Эдди Д. Редгейт › Сообщений: 1712 Rose Gold 5

Проблема была определена как несоответствие между сторонними компонентами, которые используются как для поиска SQL, так и для запросов SQL.

Теперь это решается путем обновления SQL Prompt и SQL Search до последних версий с помощью этой ссылки на последний установщик SQL Toolbelt.

Я обнаружил точно такую ​​же проблему. После успешного удаления всего и переустановки SQL Search я переустановил все остальное, кроме SQL Prompt. После этого поиск SQL продолжал работать.

Похоже, существует некоторый конфликт между подсказкой SQL и поиском SQL. Я вообще не использую Prompt, поэтому думаю, что это решает мою проблему.

<р>. но общая проблема остается.

Здравствуйте,
возникла ошибка: невозможно загрузить DLL "SQLite.Interop.dll": указанный модуль не найден. (Исключение из HRESULT: 0x8007007E)

после удаления SQL Prompt и переустановки SQL Search ошибка не отображается, но поиск не дает результатов.

есть предложения, как снова заставить работать SQL Search?

Версия поиска SQL: 3.5.5.2703
ОС: Microsoft Windows 10 Enterprise
фреймворк: 4.8.04084
Версия файла SSMS: 2019.0150.18390.00 ((SSMS_Rel).211001-1445)< br />версия продукта SSMS: 15.0.18390.0

Читайте также: