1

我正在用 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" />
4

1 回答 1

1

您将本机插件放在错误的文件夹中。

将 32 位 dll 插件放入Assets/Plugins/x86.

将 64 位 dll 插件放在Assets/Plugins/x86_64.

确保还包括任何依赖项,否则您仍然会看到相同的错误。

于 2018-04-25T06:46:43.303 回答