Я пишу плагин Unity на C #, который использует SQLite.
Зависимость SQLite от SQLite.Interop.dll, так как я понимаю, что это неуправляемая DLL.
Когда я экспортирую мои плагины Unity, вместе с моим плагином экспортировалось несколько DLL-файлов.
Bin folder
|
|_ MyPlugin.dll
|_ System.Data.SQLite.dll
|_ (other files)
|_ x86
| |_ SQLite.Interop.dll
|
|_ x64
| |_ SQLite.Interop.dll
При использовании в игровом проекте Unity все файлы я помещаю в Assets / Plugins / MyPlugin, как показано ниже:
Assets
|
|_ Plugins
|_ MyPlugin
|_ MyPlugin.dll
|_ System.Data.SQLite.dll
|_ (other files)
|_ SQLite.Interop.dll (x64 version)
В редакторе Unity все в порядке, я могу установить соединение с SQLite и выполнить транзакцию.
Однако при экспорте проекта Unity в автономное приложение для Windows x64 он не работает и выдает ошибку, сообщающую, что DllNotFoundException.
System.DllNotFoundException: SQLite.Interop.dll
at (wrapper managed-to-native) System.Data.SQLite.UnsafeNativeMethods:sqlite3_config_none (System.Data.SQLite.SQLiteConfigOpsEnum)
at System.Data.SQLite.SQLite3.StaticIsInitialized () [0x00000] in <filename unknown>:0
at System.Data.SQLite.SQLiteLog.Initialize () [0x00000] in <filename unknown>:0
at System.Data.SQLite.SQLiteConnection..ctor (System.String connectionString, Boolean parseViaFramework) [0x00000] in <filename unknown>:0
at System.Data.SQLite.SQLiteConnection..ctor (System.String connectionString) [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) System.Data.SQLite.SQLiteConnection:.ctor (string)
at MyPlugin.Service.Util.SqliteBase.InitConnection () [0x00000] in <filename unknown>:0
at MyPlugin.Service.Util.SqliteBase.OpenConnection () [0x00000] in <filename unknown>:0
Структура папок автономного приложения выглядит следующим образом:
Output
|_ UnityApp.exe
|_ UnityApp_Data
|
|_ Managed
| |_ MyPlugin.dll
| |_ System.Data.SQLite.dll
| |_ (other DLLs)
|
|_ Plugins
|_ SQLite.Intedrop.dll
DLL есть, но кажется, что Unity ее не находит.
Я нашел решение для изменения переменной среды PATH здесь https://stackoverflow.com/a/33124250
Это работает, но мне интересно, если что-то не так с моей конфигурацией или есть какая-то причина, почему Unity не загружает SQLite.Intedrop.dll, хотя он существует в папке данных приложения.
Я очень ценю любую помощь.
РЕДАКТИРОВАТЬ 1:
DLL-библиотека SQLite получает NUGET:
<package id="System.Data.SQLite" version="1.0.106.0" targetFramework="net35" />
<package id="System.Data.SQLite.Core" version="1.0.106.0" targetFramework="net35" />
<package id="System.Data.SQLite.Linq" version="1.0.106.0" targetFramework="net35" />