Sqlite interop dll не найден указанный модуль

Обновлено: 05.07.2024

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

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

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

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

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

Я не могу публиковать в 2008 году, раньше я использовал 2005 год, и он публиковался просто отлично. Ошибка 2 при подписании произошла ошибка: SignTool.exe не найден. Я знаю, что есть тонны хитов для поиска на signtool.exe в google. Те, которые я нашел, включают копирование файла в места X,Y,Z и.

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

enter image description here

Я сравнил две среды и обнаружил, что файл DLL 'SQLite.Interop.dll' не был опубликован на клиентской машине, что мы видим на следующем рисунке.

enter image description here

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

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

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

Edit: я добавил соответствующую информацию ниже на случай, если приведенная выше ссылка когда-либо dies/changes.

Если компьютеры разработчиков и клиентов могут иметь разные архитектуры процессоров, может потребоваться более одного двоичного пакета. В этой ситуации настоятельно рекомендуется использовать функцию предварительной загрузки собственной библиотеки . Он доступен с версии 1.0.80.0 и включен по умолчанию. Чтобы воспользоваться преимуществами этой функции, отдельные управляемые сборки и сборки interop должны использоваться с XCOPY deployment (т. Е. Эта функция не поддерживается смешанным режимом assembly, а также при развертывании assembly в глобальном кэше assembly), в результате чего приложение deployment выглядит примерно так:

  • bin\App.exe (необязательно, исполняемый файл только управляемого приложения assembly)
  • bin\App.dll (необязательно, библиотека приложений только для управляемых приложений assembly)
  • bin\System.Data.SQLite.dll (требуется, только управляемое ядро assembly)
  • bin\System.Data.SQLite.Linq.dll (необязательно, только для управляемых LINQ assembly)
  • bin\System.Data.SQLite.EF6.dll (необязательно, только управляемый EF6 assembly)
  • bin\x86\SQLite.Interop.dll (требуется, x86 родной interop assembly)
  • bin\x64\SQLite.Interop.dll (требуется, x64 native interop assembly)

Строка "bin" выше представляет каталог, в котором двоичные файлы приложения должны быть развернуты на целевой машине. С родным функция предварительной загрузки библиотеки включена, и приложение deployment , показанное выше, System.Data.SQLite, управляемое только assembly, попытается для автоматического определения архитектуры процессора текущего процесса и предварительной загрузки соответствующей собственной библиотеки.

Я начинаю изучать sqlite. Я ссылался на System.Data.SQLite.dll в своем проекте Visual Studio, но я не понимаю, где SQLite.Interop.dll вписывается в картину ? Должен ли я также ссылаться на него или включать его в свой проект ? Тнх.

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

Не храните dll самостоятельно и не копируйте его в /bin вручную, он потеряет контроль над обновлением версии и depenedcy.

TL;DR;

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

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

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

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

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

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

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

SQlite.Interop не является ссылочным, вы должны:

  1. В вашем проекте VS добавьте существующий файл: Sqlite.Interop.dll фактическое местоположение. \bin\Debug\x86 или \bin\Debug\x64

  2. Выберите Свойства и установите действие компиляции в "Content" и скопируйте в выходной каталог = "Always Copy"

  3. Перестраивать

Пакет System.Data.SQLite nuget включает в себя папку сборки с целевым файлом, который будет копировать эти библиотеки DLL interop. Чтобы решить эту проблему, мы должны были сказать проекту, который мы упаковываем в наш собственный nuget, чтобы NOT исключил эту сборку target/folder.

Наш проект (тот, который мы упаковываем и затем используем в другом месте) должен был иметь PrivateAssets="None" или PrivateAssets="Analyzers", если вы хотите убедиться, что не включаете анализаторы.

Обновление пакета System.Data.SQLite.Core Nuget до версии 1.0.109.2 исправило эту ошибку для меня.

Похожие вопросы:

мое приложение состоит из 2-х проектов: App (с EXE) и AppLib (библиотека с разными классами). Я добавил SQLite с NuGet в AppLib-Libary, потому что все классы, которые обрабатывают материал базы.

Visual Studio 2012 SQLite 1.0.82.0 (от nuget) Я пытаюсь использовать команду Run All в Test Explorer Следующая ошибка возникает после того, как вы запустите тест один раз . после этого он больше.

Я не могу публиковать в 2008 году, раньше я использовал 2005 год, и он публиковался просто отлично. Ошибка 2 при подписании произошла ошибка: SignTool.exe не найден. Я знаю, что есть тонны хитов для.

Я начинаю изучать sqlite. Я ссылался на System.Data.SQLite.dll в своем проекте Visual Studio, но я не понимаю, где SQLite.Interop.dll вписывается в картину ? Должен ли я также ссылаться на него или.

Я использую версию ядра System.Data.SQLite: пакет 1.0.98.1 nuget с Visual Studio 2015. Когда я создаю свой проект, который ссылается на мой пакет System.Data.SQLite, он копирует две папки (x86 и.

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

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

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

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

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

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

Изменить: я добавил соответствующую информацию ниже на случай, если указанная выше ссылка когда-либо умрет / изменится.

Если на машинах разработчика и клиента могут быть разные архитектуры процессоров, может потребоваться более одного двоичного пакета. В этой ситуации настоятельно рекомендуется использовать функцию предварительной загрузки собственной библиотеки. Он доступен с версии 1.0.80.0 и включен по умолчанию. Чтобы воспользоваться преимуществами этой функции, отдельные управляемые сборки и сборки взаимодействия должны использоваться с развертыванием XCOPY (т. Е. Эта функция не поддерживается сборкой смешанного режима или когда сборка развертывается в глобальном кэше сборок), в результате чего развертывание приложения, которое выглядит примерно так:

  • bin \ App.exe (необязательная, исполняемая сборка только управляемого приложения)
  • bin \ App.dll (необязательная сборка библиотеки только управляемого приложения)
  • bin \ System.Data.SQLite.dll (обязательная, только управляемая сборка ядра)
  • bin \ System.Data.SQLite.Linq.dll (необязательная сборка LINQ только для управления)
  • bin \ System.Data.SQLite.EF6.dll (необязательная, только управляемая сборка EF6)
  • bin \ x86 \ SQLite.Interop.dll (требуется, собственная сборка взаимодействия x86)
  • bin \ x64 \ SQLite.Interop.dll (требуется, собственная сборка взаимодействия x64)

Строка «bin» выше представляет каталог, в котором двоичные файлы приложения должны быть развернуты на целевой машине. При включенной функции предварительной загрузки собственной библиотеки и развертывании приложения, показанном выше, управляемая сборка System.Data.SQLite попытается автоматически определить архитектуру процессора текущего процесса и предварительно загрузить соответствующую собственную библиотеку.

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

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

Итак, мое решение - добавить эти две библиотеки DLL в проект, а затем их можно будет опубликовать на клиентском компьютере с помощью ClickOnce.

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

Не храните dll самостоятельно и не копируйте ее в / bin вручную, она потеряет контроль над обновлением версии и зависимостью.

TL; DR;

для старого файла csproj:

для нового файла csproj: (т.е. проекты, начинающиеся с <Project Sdk="Microsoft.NET.Sdk.*"> )

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

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

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

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

Я тоже пробовал это, и, наконец, он заработал. Однако важно следующее:

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

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

На SQlite.Interop нельзя ссылаться, вам необходимо:

  1. В вашем проекте VS добавьте существующий файл: Sqlite.Interop.dll actual расположение: \ bin \ Debug \ x86 или \ bin \ Debug \ x64

  2. Выберите свойства и установите действие компиляции в "Содержимое" и скопируйте в выходной каталог = "Всегда копировать"

  3. Восстановить

Пакет Nuget System.Data.SQLite включает папку Build с целевым файлом, который будет копировать эти DLL взаимодействия. Чтобы решить эту проблему, мы должны были сообщить проекту, который мы упаковываем в наш собственный nuget, чтобы НЕ исключать эту цель / папку сборки.

Наш проект (тот, который мы упаковываем, а затем используем в другом месте) должен иметь PrivateAssets = "None" или PrivateAssets = "Analyzers", если вы хотите убедиться, что в него не включены анализаторы.

Я использую 1.0.82.0. версии, устанавливая его с помощью nuget в VS2010, OS Win7 64.

Кто-нибудь видел что-то подобное и есть ли решение для этого?

Я знаю, что опаздываю на вечеринку, но у меня была эта проблема сразу после того, как сегодня я снял последнюю версию x86/x64 (версия 1.0.88.0). Мой локальный IIS в VS2012 по умолчанию 32bit, и нет простого способа переключения на x64. Мой сервер работает на 64-разрядной версии.

В любом случае я установил пакет NuGet в проект DLL, и я получил эту ошибку. Что я должен был сделать, чтобы заставить его работать, мне пришлось установить его на основной сайт. Даже если он вообще не затрагивает классы SQLite.

Мое предположение заключается в том, что SQLite использует сборку ввода для определения загружаемой версии Interop.

Решение было очень простым: просто добавьте пакет Sqlite.Core в качестве зависимости (с NuGet) к проекту, который вы создаете/выполняете, и dll-ы будут скопированы.

У меня была такая же проблема при использовании SQLite в проекте WPF, целью платформы которого было Any CPU . Я исправил его, выполнив следующие шаги:

В качестве альтернативы вы можете просто установить целевую платформу для платформы x86 или x64 . Я думаю, эта проблема вызвана библиотекой System.Data.SQLite , использующей целевую платформу, чтобы получить местоположение файла SQLite.Interop.dll.

Если проектор не может быть достигнут, просто откройте файл проекта ( *.csproj ) из текстового редактора и добавьте значение <Prefer32Bit>false</Prefer32Bit> в тег <PropertyGroup>. </PropertyGroup> .

Вот как я исправил его в своем проекте.

Развернув файл проекта .csproj, это было в версии NON-WORKING:

И это была версия WORKING:

Вернувшись назад, я не получил исключения. Файлы DLL были сброшены в соответствующие папки Debug\x64 (etc).

Когда вы перейдете в это состояние, попробуйте выполнить команду Rebuild-All. Если это исправляет проблему, у вас может быть такая же проблема.

Некоторые фон (мое понимание):

При загрузке управляемая сборка будет искать платформу
специфических сборок внутри папок \x86 и\x64. Ты можешь видеть
подробнее об этом здесь. Исключением является
сборку, пытающуюся найти соответствующий (SQLite.Interop.dll) внутри
эти папки (и сбои).

Мой сценарий:

У меня есть 2 проекта в моем решении; приложение WPF и библиотеку классов. Приложение WPF ссылается на библиотеку классов, а библиотека классов ссылается на SQLite (устанавливается через Nuget).

Проблема для меня заключалась в том, что когда я изменяю только приложение WPF, VS пытается выполнить частичную перестройку (понимая, что зависимая dll не изменилась). Где-то в этом процессе VS очищает содержимое папок \x86 и\x64 (сбрасывает SQLite.Interop.dll). Когда я делаю полное Rebuild-All, VS копирует папки и их содержимое правильно.

Мое решение:

В качестве альтернативы вы можете делать более интересные вещи с помощью каталогов конфигурации/вывода сборки.

У меня была такая же проблема с Visual Studio Express 2013. Я пробовал несколько решений, упомянутых здесь и в других местах, безрезультатно. Я надеюсь, что это исправление поможет другим.

Я исправил его с помощью атрибута DeploymentItem моего тестового класса, который тестирует службу на основе SQLite.

Все зеленые. Все хорошо.

Обновление NuGet с Tools -> Extension and updates и переустановка SQLite.Core с помощью команды PM> Update-Package -reinstall System.Data.SQLite.Core исправлена ​​для меня.

У меня была аналогичная проблема в решении нескольких проектов. SQLite.Interop.dll был необходим для одного из плагинов, распространяемых вместе с программным обеспечением с помощью ClickOnce.

Что касается отладки в visual studio, все работало нормально, но в развернутой версии отсутствовали папки x86/и x64/, содержащие эту DLL.

Решение о том, чтобы оно работало после развертывания с использованием ClickOnce, заключалось в том, чтобы создать в проекте запуска (также опубликованном) эти две вложенные папки, скопировать в них библиотеки DLL и установить их как Content Copy Always.

Таким образом, средство публикации ClickOnce автоматически включает эти файлы и папки в манифест и развертывает с ними программное обеспечение.

Проблема заключалась в том, что исполняемому файлу нужна копия права SQLite.Interop.dll (x86 или x64) для доступа к нашей базе данных.

В большинстве архитектур есть слои, и в моем случае на уровне данных имеется требуемая DLL для SQLite Connection.

Итак, я просто поставил post build script в свое решение Data Layer Solution, и все сработало нормально.

TL; DR;

    Задайте все проекты вашего решения x86 или x64 в настройках сборки.

Добавьте следующий проект Post-Build-Script в проект с помощью SQLite nuget Package :

xcopy "$(TargetDir)x64" "$(SolutionDir)bin\Debug\" /y

Конечно, вам нужно изменить сборки script для Release Build и x86 .

СТЛ; ДР;

Поместите ваш SQLite.Interop.dll рядом с файлом *.exe .

Добавьте объявление для вызова функции kernel32.dll в SetDLLDirectory() перед вашей программой. Main():

Затем используйте свой собственный метод для определения правильного подкаталога, чтобы найти версию, специфичную для архитектуры SQLite.Interop.dll. Я использую следующий код:

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

Вы также можете получить эту ошибку, если пытаетесь запустить 32-разрядную dll в 64-битном проекте.

Я получил это, когда я разместил тот же файл (SQLite.Interop.dll в 32-разрядной версии) в папке x86 и x64.

Установите Костуру Фоди из Нугета.

Наконец, вам нужно изменить XML файл FodyWeavers.xml следующим образом. Здесь я сначала определяю загрузку sql dll. (обратите внимание, что вы отбрасываете .dll)

Преимущество этого заключается в том, что вам не нужно писать какие-либо события предварительной или пост-сборки, а конечный продукт полностью инкапсулирован в один более крупный файл.

Что я видел в других ответах, которые не применялись:

(11) Почему я пытаюсь запустить приложение DllNotFoundException (для sqlite3.dll или SQLite.Interop.dll)?

Либо названная библиотека динамических ссылок (DLL) не может быть расположена, либо она не может быть загружена из-за отсутствия зависимостей. Убедитесь, что указанная динамическая библиотека ссылок находится в каталоге приложения или в каталоге по системе PATH и повторите попытку. Кроме того, убедитесь, что необходимая распространяемая среда исполнения Visual С++ установлена ​​, если вы не используете динамическую библиотеку ссылок, которая была статически связана с ней.

Как говорится в SQLite wiki, развертывание вашего приложения должно быть:

Итак, вам нужно следовать правилам. Найдите dll, который соответствует вашей целевой платформе, и поместите ее в папку, описанную на картинке. Dll можно найти в файле YourSolution/packages/System.Data.SQLite.Core.% Version%/.

У меня были проблемы с развертыванием приложений, поэтому я просто добавил в свой проект правильный SQLite.Interop.dll, добавленную папку x86 в AppplicationFolder в проект установки и добавленные ссылки на файлы для dll.

Перед установкой установите целевую платформу для x86 или x64 (а не любой CPU):
Project- > Properties- > Build- > Платформа в Visual Studio.

Скопируйте файл SQLite.Interop.dll в каталог проекта.

Я долгое время боролся с этим, и иногда я обнаружил, что установка теста неверна. Смотреть это изображение:

Я просто сниму настройку теста, и проблема исчезнет. В противном случае произойдет исключение.
Надеюсь, это поможет кому-то.
Не уверен, что это основная причина.

Также добавил dll в тестовый проект (через Nuget Manager) и исправил его.

Может ли быть конкуренция за сборку? Проверьте, есть ли другое приложение с блокировкой файлов в DLL.

Если это причина, для обнаружения нарушительной программы должно быть легко использовать инструмент Sysinternal Process Explorer.

Для справки для любого, кто смотрит на этот вопрос:

Установщик nuget автоматически добавляет правило в файл проекта.

У меня была эта проблема, потому что Visual С++ 2010 распространялся без установки на моем компьютере. Если вы еще не установили распространяемый дистрибутив Visual С++ 2010 Download и установите это (проверьте x86 или 64 dll).

То, что я сделал, было в Visual Studio, добавило папку решений x86 и x64 в тестер функций и веб-проекты. Затем я сделал Right Click | Add Existing Item. и добавил соответствующую библиотеку SQLite.interop.dll из ..\SolutionFolder\packages\System.Data.SQLite.Core.1.0.94.0\build\net451\[appropriate architecture] для каждой из этих папок. Затем я сделал a Right Click | Properties и установил Copy to Output Directory в Always Copy . В следующий раз, когда мне нужно было запустить мои функциональные тесты, тесты прошли успешно.

Короче

Чтобы заставить это работать и с NCrunch, мне пришлось добавить версии Interop.dll, поставляемые с пакетом NuGet, в виде дополнительных файлов в конфигурации NCrunch.

Мой случай

В моем случае обходной путь предоставленный Marin, он работал в Visual Studio и в CI. Однако это все равно приведет к ошибкам в NCrunch.

Я использую 1.0.82.0. версия, установив ее с помощью nuget в VS2010, ОС Win7 64.

Как только исключение начинает появляться, оно появляется постоянно - при отладке, выпуске и запуске приложения внутри или вне VS.

Единственный способ остановить это - выход из системы и вход в систему. Исключение не выдается и dll загружается. Это может работать в течение нескольких дней, но затем оно может снова сломаться.

Кто-нибудь видел что-то подобное и есть ли решение для этого?

Да, он установлен для копирования всегда. У меня есть папки x64 и x86 в bin / debug. И это работает в основном, но иногда просто перестает работать. Возможно, что-то блокирует доступ к DLL, я постараюсь выяснить это в следующий раз, когда он перестает работать. Как я уже сказал, дни могут работать без проблем. Я получил эту ошибку прямо из коробки после добавления пакета SQLite nuget в новый консольный проект. Копирование SQLite.Interop.dll вручную из папки x86 на один уровень выше позволяет запустить приложение. Мне кажется странным, что это было бы так сломано. @ Уэйн Да, это определенно помогает. Но в моем случае мы работаем вместе над проектом, и мой друг использует x86, а я - x64 OS. И, как я заметил, иногда он просто перестает работать. Хотя это не случилось со мной в прошлом месяце. Если вы загружаете правильный двоичный файл для SQLite, скопируйте SQLite.Interop.dll в папку Release или Debug в соответствии с вариантом сборки проекта. Это такая случайная ошибка . иногда она возникает, а иногда нет для моего проекта. Перепробовал все.

Я знаю, что опоздал на вечеринку, но у меня возникла эта проблема сразу после того, как я сегодня снял последнюю версию x86 / x64 (версия 1.0.88.0). Мой локальный IIS в VS2012 работает по умолчанию с 32-битной версией, и нет простого способа перейти на x64. Мой рабочий сервер работает на 64-битной.

В любом случае я установил пакет NuGet в проект DLL и получил эту ошибку. Что я должен был сделать, чтобы это работало, я должен был установить это на главный сайт проект . Даже если это не касается классов SQLite.

Я предполагаю, что SQLite использует сборку ввода, чтобы определить, какую версию Interop загрузить.

Это сработало для меня после того, как я добавил ссылку на SQLite Core с NuGet в основной проект. Добавление sqllite.core к основному проекту помогло мне в моем решении WPF Мне пришлось сделать на своем веб-сайте как Sqlite, так и пакет Install-Package System.Data.SQLite.Core, даже если вызовы БД находятся в библиотеке . Что вы подразумеваете под «основным сайтом» проекта? В моем случае я делаю настольную работу. Вы имеете в виду «стартап» проекта?

У меня была эта проблема, потому что у dll, которую я использовал, была Sqlite как зависимость (настроенная в NuGet только с базовым пакетом Sqlite.). Проект компилирует и копирует все Sqlite dll-ы, кроме «SQLite.Interop.dll» (как папки x86, так и x64).

Решение было очень простым: просто добавьте пакет Sqlite.Core в качестве зависимости (с NuGet) в проект, который вы создаете / выполняете, и dll-ы будут скопированы.

Опробовано немало решений, размещенных здесь, на самом деле это лучше всего сработало. Как вы можете добавить такую ​​зависимость? никогда не делал этого (VS2013) Выберите Инструменты -> Диспетчер пакетов NuGet -> Управление пакетами NuGet для решения . -> Онлайн -> Все. Затем найдите sqlite и добавьте System.Data.SQLite Core (x86 / x64).

У меня была такая же проблема при использовании SQLite в проекте WPF, целью которого была платформа Any CPU . Я исправил это, выполнив следующие шаги:

  1. Откройте дизайнер проекта в Visual Studio. Подробности о том, как это сделать, можно найти здесь .
  2. Нажмите на вкладку Build.
  3. Отключить prefer 32-bit опцию.

В качестве альтернативы, вы можете просто установить цель платформы на x86 или x64 . Я думаю, что эта проблема вызвана System.Data.SQLite библиотека использует целевой объект платформы для определения местоположения файла «SQLite.Interop.dll».

Если конструктор проекта не может быть достигнут, просто откройте *.csproj файл project ( ) из текстового редактора и добавьте значение <Prefer32Bit>false</Prefer32Bit> в <PropertyGroup>. </PropertyGroup> тег.

@xll, я отредактировал ответ для уточнения. Проверьте, проясняет ли редактирование вещи. Опция включена только в проектах EXE, но я думаю, что большинство из нас имеют эту проблему с проектами модульного тестирования. Был выделен серым для меня в проекте WPF в VS Pro 2015. .csproj Файл уже был установлен в файл false , но все еще имел ошибку.

Вот как я это исправил в своем проекте.

Это работало, и когда коллега представил свои изменения, я получил исключение «Невозможно загрузить DLL« SQLite.Interop.dll »».

В отличие от файла .csproj проекта, это было в НЕ РАБОЧЕЙ версии:

И вот что было в РАБОЧЕЙ версии:

Вернувшись назад, я не получил исключение. Файлы DLL были выгружены в соответствующие папки Debug \ x64 (и т. Д.).

<itemgroup> для "SQLite.Interop.dll" отсутствует в файле проекта .csproj. Это не будет работать в VS2012, элементы не существуют. Да, ContentSQLiteInteropFiles является ответом. 1. Это должен быть принятый ответ. 2. С другой стороны, должно быть исследовано, что как пакет nuget, как заставить это работать автоматически, или, по крайней мере, документировать необходимость этой конфигурации. Должен быть принятый ответ. Супер просто. 1. разгрузить проект 2. добавить вышеперечисленное в csproj 3. перезагрузить проект. это так просто .

Когда вы попадете в это состояние, попробуйте выполнить Rebuild-All. Если это решит проблему, у вас может быть та же проблема, что и у меня.

Немного предыстории (мое понимание) :

SQLite имеет 1 управляемую сборку (System.Data.SQLite.dll) и несколько сборок, специфичных для платформы (SQLite.Interop.dll). При установке SQLite с Nuget, Nuget добавит специфичные для платформы сборки в ваш проект (в нескольких папках: \ x86, \ x64) и сконфигурирует эти библиотеки как «Копировать всегда».

При загрузке управляемая сборка будет искать специфичные для платформы сборки в папках \ x86 и \ x64. Вы можете увидеть больше об этом здесь . Исключением является то, что эта управляемая сборка пытается найти соответствующие (SQLite.Interop.dll) внутри этих папок (и не удается).

Мой сценарий :

У меня есть 2 проекта в моем решении; приложение WPF и библиотека классов. Приложение WPF ссылается на библиотеку классов, а библиотека классов ссылается на SQLite (устанавливается через Nuget).

Для меня проблема заключалась в том, что, когда я изменяю только приложение WPF, VS пытается выполнить частичное восстановление (понимая, что зависимая DLL не изменилась). Где-то в этом процессе VS очищает содержимое папок \ x86 и \ x64 (удаляя SQLite.Interop.dll). Когда я делаю полную Rebuild-All, VS копирует папки и их содержимое правильно.

Мое решение :

В качестве альтернативы, вы можете сделать более интересные вещи с помощью конфигурационных / выходных каталогов сборки.

Мое почти идентичное решение состояло в том, чтобы добавить папки x86 и x64 в мой стартовый проект, а затем добавить файлы взаимодействия x86 и x64 в соответствующие папки. Я установил опцию файлов на «контент» и «строить всегда». Это единственный способ, с помощью которого мое приложение Windows Forms может подключиться к встроенному файлу базы данных s3db, когда я развернул приложение с ClickOnce на других компьютерах. К сожалению, у меня не было ошибки SQLite при разработке и тестировании приложения на моем ПК. Это ответ, который помогает мне понять мою проблему, хотя мое решение немного другое. Моя проблема в том, что я добавил system.data.Sqlite.dll вручную. Таким образом, Sqlite.Interop.dll автоматически не копируется в \ x86 и x64. Исправление - удалить ссылку и добавить ее с помощью Nuget.

У меня была та же проблема с Visual Studio Express 2013. Я пробовал несколько решений, упомянутых здесь и в других местах, но безрезультатно. Я надеюсь, что это исправление помогает другим.

Я исправил это с помощью DeploymentItem атрибута в моем тестовом классе, который тестирует службу на основе SQLite.

Это приводит к необходимости SQLite.Interop.dll скопировать в x86 каталог в соответствующей папке «TestResults».

Все зелено. Все хорошо.

Это решение работает, только если вы используете пространство имен Microsoft.VisualStudio.TestTools.UnitTesting Это правильное решение, если вы используете MSTest. SQLite работал нормально, без проблем обнаружив SQLite.Interop.dll, пока я не использовал DeploymentItem ("some.csv") для теста. Включение файла .csv таким образом вызвало MSTest для копирования всех указанных библиотек в каталог TestResults. Поскольку SQLite.Interop.dll не упоминается в проекте (и не может быть, поскольку это неуправляемый код), он никогда не копируется. Лучше всего добавить две строки, по одной для каждой архитектуры. Это защитит вас в случае, если тестовый бегун будет работать 64-битно.

Обновление NuGet Tools -> Extension and updates и переустановка SQLite.Core с помощью команды PM> Update-Package -reinstall System.Data.SQLite.Core исправило это для меня.

Если вы получаете ошибку при этом, удаление моих библиотек DLL / ссылок SQLite и полная переустановка их из переустановите sqllite core, помогите мне тоже. Произошло в VS2012. VS не включил версию x62 в пакет веб-развертывания

У меня была похожая проблема в решении нескольких проектов. SQLite.Interop.dll был необходим для одного из плагинов, распространяемых вместе с программным обеспечением, использующим ClickOnce.

Что касается отладки в visual studio, то все работало нормально, но в развернутой версии отсутствовали папки x86 / и x64 /, содержащие эту DLL.

Чтобы заставить его работать после развертывания с использованием ClickOnce, нужно было создать в стартовом проекте решения (также опубликованного) эти две подпапки, скопировать в них библиотеки DLL и установить их как Content Copy Always.

Таким образом, инструмент публикации ClickOnce автоматически включает эти файлы и папки в манифест и развертывает программное обеспечение вместе с ними.

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

Проблема заключалась в том, что SQLite.Interop.dll для доступа к нашей базе данных исполняемому файлу требуется копия права (x86 или x64).

В основном у архитектур есть слои, а в моем случае уровень данных имеет необходимую DLL для подключения SQLite.

Поэтому я просто вставил скрипт посткомпоновки в решение Data Layer, и все заработало нормально.

Установите для всех проектов вашего решения x86 или x64 в опциях сборки.

Добавить следующее Post-Build-Script к проекту с SQLite nuget Package :

xcopy "$(TargetDir)x64" "$(SolutionDir)bin\Debug\" /y

Конечно, вы должны изменить сценарий для Release Build и x86 сборок.

Поместите SQLite.Interop.dll рядом с *.exe файлом.

Добавьте объявление для вызова функции kernel32.dll в SetDLLDirectory () перед вашей Program.Main ():

Затем используйте свой собственный метод для определения правильного подкаталога, чтобы найти версию SQLite.Interop.dll для конкретной архитектуры. Я использую следующий код:

Если вы не хотите читать все проблемы, решение состоит в том, чтобы скопировать файл "msvcr100.dll" (который находится в каталоге Windows \ System32) по тому же пути, что и SQLite.Interop.dll.

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

Большое спасибо за это, я попробовал все остальное, и это было решением

Как говорится в вики SQLite , ваше приложение должно быть:

Развертывание приложения

Так что нужно соблюдать правила. Найдите dll, которая соответствует вашей целевой платформе, и поместите ее в нужное место, описанное на картинке. Dlls можно найти в YourSolution / packages / System.Data.SQLite.Core.% Version% /.

У меня были проблемы с развертыванием приложения, поэтому я просто добавил в свой проект правильный файл SQLite.Interop.dll, добавил папку x86 в AppplicationFolder в проекте установки и добавил ссылки на файлы в dll.

Вы также можете получить эту ошибку, если вы пытаетесь запустить 32-битную DLL в 64-битном проекте.

Я получил это, когда поместил один и тот же файл (SQLite.Interop.dll в 32-разрядной версии) в папку x86 и x64.

Если вы загрузили правильный двоичный файл для, SQLite скопируйте его SQLite.Interop.dll в папку Release или Debug в соответствии с опцией сборки вашего проекта.

Я не знаю, почему это еще не было включено, но я должен был провести исследование и выяснить это для себя, так что, надеюсь, кто-то найдет этот ответ и спасет проблему. Это было для приложения WPF. Он отлично работал на моем устройстве Dev, но не работал на компьютере, где я его копировал, и получил Unable to load DLL 'SQLite.Interop.dll' ошибку. Я перенес все связанные с ним каталоги и файлы прямо из папки «Debug» на этот другой компьютер, когда у меня возникла та же ошибка, что и у OP при запуске. Моя папка «bin», в которой находились мои библиотеки DLL, была скопирована в «Debug \ bin», и все они были включены вместе с файлами приложения, когда я выполняла копирование на другой компьютер по этому пути, поэтому в ней не было пропущено ни одного файла.

То, что я видел, говорилось в других ответах, которые не были применимы:

  • Я не использовал пакет NuGet и не нуждался в создании папок x86 или x64, которые, кажется, создает пакет NuGet. Мои библиотеки DLL (System.Data.SQLite и SQLite.Interop.dll вместе с System.Data.SQLite.config) находятся в папке «bin» в моем проекте и были скопированы вручную (создайте папку «bin» в обозревателе решений в VS, вставьте библиотеки DLL в эту папку в проводнике Windows, используйте Добавить> Существующий элемент для переноса файлов в папку / проект VS). Затем я ссылаюсь на них как на «Связанные сборки» в моем проекте, используя это местоположение («Ссылки»> «Добавить ссылку», и просматриваю одну, промываю, повторяю для остальных). Это гарантирует, что мой проект точно знает, где они находятся.
  • Мне не нужно было ссылаться на какой-либо файл DLL SQLite в моем app.config или даже касаться моего файла MyProject.csproj.
  • Мне даже не нужно было указывать конкретный процессор! Мой проект предназначен для «Любого процессора», хотя у меня есть только смешанные или 64-битные библиотеки DLL, и я буду работать только в Windows 7+, которые являются 64-битными ОС. (нет только x86 / только 32-битных DLL)
  • Я уже определял их как «Содержимое» и «Копировать, если новее» для этих библиотек DLL, когда обнаружил ошибку OP.

(11) Почему я получаю DllNotFoundException (для "sqlite3.dll" или "SQLite.Interop.dll") при попытке запустить мое приложение?

Либо указанная библиотека динамических ссылок (DLL) не может быть найдена, либо ее невозможно загрузить из-за отсутствующих зависимостей. Убедитесь, что именованная динамическая библиотека находится в каталоге приложения или в каталоге по системной переменной PATH, и повторите попытку. Кроме того, убедитесь, что установлен необходимый распространяемый файл среды выполнения Visual C ++. если только вы не используете динамически подключаемую библиотеку, статически связанную с ней.

Файлы System.Data.SQLite Interop Assembly, такие как SQLite.Interop.dll, используют расширение DLL. Файл считается файлом Win32 DLL (Библиотека динамической компоновки) и впервые был создан компанией Johannes Wallroth для пакета ПО System.Data.SQLite.

Файл SQLite.Interop.dll впервые был выпущен в ОС Windows 10 10/30/2018 с WinZip 23.0.13300.0. Последнее обновление для Sharp World Clock 8.4.6 состоялось 12/10/2018 [версия файла 1.0.105.2]. Файл SQLite.Interop.dll включен в Sharp World Clock 8.4.6, Free Snipping Tool 4.1 и iExplorer 4.2.2.

Продолжайте читать, чтобы найти загрузку правильной версии файла SQLite.Interop.dll (бесплатно), подробные сведения о файле и порядок устранения неполадок, возникших с файлом DLL.




Совместимость с Windows 10, 8, 7, Vista, XP и 2000

Средняя оценка пользователей

Сведения о разработчике и ПО
Разработчик ПО: Robert Simpson, et al.
Программа: System.Data.SQLite
Авторское право: Public Domain
Сведения о файле
Набор символов: Unicode
Код языка: English (U.S.)
Флаги файлов: (none)
Маска флагов файлов: 0x003f
Точка входа: 0x2f1d
Размер кода: 953856
Информация о файле Описание
Размер файла: 1154 kB
Дата и время изменения файла: 2020:02:07 15:06:12+00:00
Тип файла: Win32 DLL
Тип MIME: application/octet-stream
Тип компьютера: Intel 386 or later, and compatibles
Метка времени: 2017:06:10 18:24:12+00:00
Тип PE: PE32
Версия компоновщика: 12.0
Размер кода: 953856
Размер инициализированных данных: 227328
Размер неинициализированных данных: 0
Точка входа: 0x2f1d
Версия ОС: 6.0
Версия образа: 1.0
Версия подсистемы: 6.0
Подсистема: Windows GUI
Номер версии файла: 1.0.105.2
Номер версии продукта: 1.0.105.2
Маска флагов файлов: 0x003f
Флаги файлов: (none)
Файловая ОС: Win32
Тип объектного файла: Dynamic link library
Подтип файла: 0
Код языка: English (U.S.)
Набор символов: Unicode
Наименование компании: Robert Simpson, et al.
Описание файла: System.Data.SQLite Interop Assembly
Версия файла: 1.0.105.2
Внутреннее имя: SQLite.Interop
Авторское право: Public Domain
Название продукта: System.Data.SQLite
Версия продукта: 1.0.105.2

✻ Фрагменты данных файлов предоставлены участником Exiftool (Phil Harvey) и распространяются под лицензией Perl Artistic.

Ошибки библиотеки динамической компоновки SQLite.Interop.dll

Файл SQLite.Interop.dll считается разновидностью DLL-файла. DLL-файлы, такие как SQLite.Interop.dll, по сути являются справочником, хранящим информацию и инструкции для исполняемых файлов (EXE-файлов), например MpSigStub.exe. Данные файлы были созданы для того, чтобы различные программы (например, Sharp World Clock) имели общий доступ к файлу SQLite.Interop.dll для более эффективного распределения памяти, что в свою очередь способствует повышению быстродействия компьютера.

  • Нарушение прав доступа по адресу — SQLite.Interop.dll.
  • Не удается найти SQLite.Interop.dll.
  • Не удается найти C:\Program Files (x86)\Sharp World Clock 8\SQLite.Interop.dll.
  • Не удается зарегистрировать SQLite.Interop.dll.
  • Не удается запустить Sharp World Clock. Отсутствует требуемый компонент: SQLite.Interop.dll. Повторите установку Sharp World Clock.
  • Не удалось загрузить SQLite.Interop.dll.
  • Не удалось запустить приложение, потому что не найден SQLite.Interop.dll.
  • Файл SQLite.Interop.dll отсутствует или поврежден.
  • Не удалось запустить это приложение, потому что не найден SQLite.Interop.dll. Попробуйте переустановить программу, чтобы устранить эту проблему.

Файл SQLite.Interop.dll может отсутствовать из-за случайного удаления, быть удаленным другой программой как общий файл (общий с Sharp World Clock) или быть удаленным в результате заражения вредоносным программным обеспечением. Кроме того, повреждение файла SQLite.Interop.dll может быть вызвано отключением питания при загрузке Sharp World Clock, сбоем системы при загрузке SQLite.Interop.dll, наличием плохих секторов на запоминающем устройстве (обычно это основной жесткий диск) или, как нередко бывает, заражением вредоносным программным обеспечением. Таким образом, крайне важно, чтобы антивирус постоянно поддерживался в актуальном состоянии и регулярно проводил сканирование системы.


Шаг 1. Восстановите компьютер до последней точки восстановления, «моментального снимка» или образа резервной копии, которые предшествуют появлению ошибки.

Чтобы начать восстановление системы (Windows XP, Vista, 7, 8 и 10):

Если на этапе 1 не удается устранить ошибку SQLite.Interop.dll, перейдите к шагу 2 ниже.


Шаг 2. Если вы недавно установили приложение Sharp World Clock (или схожее программное обеспечение), удалите его, затем попробуйте переустановить Sharp World Clock.

Чтобы удалить программное обеспечение Sharp World Clock, выполните следующие инструкции (Windows XP, Vista, 7, 8 и 10):

После полного удаления приложения следует перезагрузить ПК и заново установить Sharp World Clock.

Если на этапе 2 также не удается устранить ошибку SQLite.Interop.dll, перейдите к шагу 3 ниже.


Sharp World Clock 8.4.6

Шаг 3. Выполните обновление Windows.


Если ни один из предыдущих трех шагов по устранению неполадок не разрешил проблему, можно попробовать более агрессивный подход (примечание: не рекомендуется пользователям ПК начального уровня), загрузив и заменив соответствующую версию файла SQLite.Interop.dll. Мы храним полную базу данных файлов SQLite.Interop.dll со 100%-ной гарантией отсутствия вредоносного программного обеспечения для любой применимой версии Sharp World Clock . Чтобы загрузить и правильно заменить файл, выполните следующие действия:

Windows 10: C:\Program Files (x86)\Avira\System Speedup\x86\
Windows 10: C:\Program Files (x86)\Avira\Game Booster\x64\
Windows 10: C:\Program Files\VDownloader\x86\
Windows 10: C:\Users\Tester\AppData\Local\Apps\2.0\PBKKG9EJ.PC6\L4RDGD0J.462\iexp. exe_de920447ba0a2002_0004.0003_none_a5aacf1ad00718ec\x64\
Windows 10: C:\Users\Tester\AppData\Local\Apps\2.0\PBKKG9EJ.PC6\L4RDGD0J.462\iexp..tion_de920447ba0a2002_0004.0003_530a5bc63d62a78a\x64\
Показать на 22 каталогов больше + Windows 10: C:\Program Files (x86)\Duplicate Cleaner Free\x64\
Windows 10: C:\Program Files (x86)\Avira\Game Booster\x86\
Windows 10: C:\Program Files\iolo technologies\System Mechanic\PrivacyGuardian\x64\
Windows 10: C:\Program Files\iolo technologies\System Mechanic\x64\
Windows 10: C:\Users\Tester\AppData\Local\Apps\2.0\PBKKG9EJ.PC6\L4RDGD0J.462\iexp. exe_de920447ba0a2002_0004.0003_none_a5aacf1ad00718ec\x86\
Windows 10: C:\Users\Tester\AppData\Local\Apps\2.0\PBKKG9EJ.PC6\L4RDGD0J.462\iexp..tion_de920447ba0a2002_0004.0003_530a5bc63d62a78a\x86\
Windows 10: C:\Program Files (x86)\Duplicate Cleaner Free\x86\
Windows 10: C:\Program Files (x86)\Avira\Privacy Pal\x64\
Windows 10: C:\Program Files\iolo technologies\System Mechanic\PrivacyGuardian\x86\
Windows 10: C:\Program Files\iolo technologies\System Mechanic\x86\
Windows 10: C:\Users\Tester\AppData\Roaming\Free Snipping Tool\App\x64\
Windows 10: C:\Program Files (x86)\Sharp World Clock 8\
Windows 10: C:\Program Files (x86)\Razer\Razer Services\GMS\x64\
Windows 10: C:\Program Files (x86)\Avira\Privacy Pal\x86\
Windows 10: C:\Program Files\Softland\novaPDF 10\Server\x64\
Windows 10: C:\Users\Tester\AppData\Roaming\Free Snipping Tool\App\x86\
Windows 10: C:\Program Files\WinZip\
Windows 10: C:\Program Files (x86)\Razer\Razer Services\GMS\x86\
Windows 10: C:\Program Files (x86)\Avira\System Speedup\x64\
Windows 10: C:\Program Files\Softland\novaPDF 10\Server\x86\
Windows 10: C:\Program Files\VDownloader\x64\
Windows 10: C:\Program Files (x86)\Nero\Nero Platinum\Nero BackItUp\

Если этот последний шаг оказался безрезультативным и ошибка по-прежнему не устранена, единственно возможным вариантом остается выполнение чистой установки Windows 10.

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