Unity 5.5.6f1 - Native插件不起作用,错误DllNotFoundException

时间:2018-04-25 05:27:42

标签: c# sqlite unity3d dllnotfoundexception

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

1 个答案:

答案 0 :(得分:1)

您将原生插件放在错误的文件夹中。

将32位dll插件放在click_me("aots-cm")

将64位dll插件放在Assets/Plugins/x86

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