我正在用C#编写Unity插件,使用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: 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" />
答案 0 :(得分:1)
您将原生插件放在错误的文件夹中。
将32位dll插件放在click_me("aots-cm")
。
将64位dll插件放在Assets/Plugins/x86
。
确保还包含任何依赖项,否则您仍会看到相同的错误。