我正在用 C# 编写一个使用 SQLite 的 Unity 插件。
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:SQLite DLL 由 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" />