"Не удалось найти точку входа с именем 'sqlite3_open_interop' в DLL 'SQLite.Interop.dll'." - PullRequest
0 голосов
/ 10 июля 2019

Я использую приложение C # для подключения к базе данных SQLite. Приложение использует библиотеку System.Data.Sqlite, версия 108. В Visual Studio 2017 моей конфигурацией решения является Отладка, а моей платформой решений - Любой ЦП. Всякий раз, когда я собираю и запускаю приложение, я получаю следующее исключение времени выполнения:

enter image description here

Исключение не обрабатывается, и приложение завершается.

Конечно, в моем каталоге bin \ Debug есть файл SQLite.Interop.dll. (Если бы не было, исключение было бы другим.) В частности, есть два, каждый в своих подкаталогах с именами x64 и x86. Я предполагаю, что файл в каталоге x86 используется, поскольку для Solution Platform установлено значение Any CPU. Версия сборки SQLite.Interop.dll совпадает с версией System.Data.SQLite.dll и составляет 1.0.108.0.

Когда я использую следующую команду для опроса сборок:

dumpbin /exports SQLite.Interop.dll

Я нашел следующую строку в выводе для сборки x64 версии:

175   AE 00040750 sqlite3_open_interop

но в выводе для версии x86 у меня нет. Вместо этого я нахожу эту строку:

175   26 00037F10 _sqlite3_open_interop@20

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

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

Я попытался удалить ссылку на System.Data.SQLite и использовать Nuget, чтобы добавить самую последнюю версию 1.0.111.0, затем очистить и перестроить решение, но все безрезультатно. Повторяется та же проблема.

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

* Edit1: я попробовал этот проект на своем домашнем компьютере и обнаружил одинаковую разницу между двумя файлами SQLite.Interop.dll. Версия x64 имела sqlite3_open_interop, а версия x86 - _sqlite3_open_interop @ 20. Однако проблема не возникла там . Так что, видимо, это искаженное название «проблема» - красная сельдь. Я все еще очень заинтересован в решении этой проблемы и был бы признателен за помощь тому, кто работает над System.Data.Sqlite!

1 Ответ

0 голосов
/ 16 июля 2019

Оказалось, что проблема заключалась в том, что сборка каким-то образом блокировалась или нарушалась McAfee Host Intrusion Prevention.Журнал активности содержал следующее сообщение:

Тип атаки: DISA McAfee - предотвращение запуска непредвиденных DLL-файлов в пользовательских папках AppData и ProgramData (Sig Id = 7020)

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

Также примечательно, что исключение не намекает на помехи со стороны сканера безопасности.

Вздох.Я не знаю, насколько в целом полезен этот ответ, но я оставлю его здесь.Это может кому-то помочь.Администраторы могут удалить его, если посчитают нужным.

...