【发布时间】:2013-07-24 12:27:26
【问题描述】:
我只是按照
的说明进行操作SQLite-on-Visual-Studio-with-NuGet-and-Easy-Instructions
我可以使用
编译示例 C# 应用程序“任何CPU”
选项。
但是当我运行应用程序时,如果我选择
“首选 32 位”
选项,我的应用程序崩溃:
"无法加载 DLL "SQLite.Interop.dll"
如果我取消选中“首选 32 位”选项,它在我的 64 位机器上可以正常工作。
为什么会发生这种情况?有什么修复它的建议吗?
PS:我使用 64 位 Windows 8。我为 SQLite 提供 [x86] 和 [x64] 文件夹。
PS 1: 错误:
System.TypeInitializationException:“System.Data.SQLite.SQLiteFactory”的类型初始化程序引发了异常。 ---> System.DllNotFoundException:无法加载 DLL 'SQLite.Interop.dll': 指定的模块无法找到。 (来自 HRESULT 的异常:0x8007007E) 在 System.Data.SQLite.UnsafeNativeMethods.sqlite3_config_none(SQLiteConfigOpsEnum 操作) 在 System.Data.SQLite.SQLite3.StaticIsInitialized() 在 System.Data.SQLite.SQLiteLog.Initialize() 在 System.Data.SQLite.SQLiteFactory..cctor() --- 内部异常堆栈跟踪结束 --- 在 System.Data.SQLite.SQLiteFactory..ctor()
PS 3:
我注意到一件有趣的事情。虽然在视觉工作室它会崩溃, 当我运行我的程序 exe 时,只需单击它,它就可以工作。
【问题讨论】:
-
调试您的应用程序并找出返回的内容:System.IO.Directory.GetCurrentDirectory();这可能是您的 .dll 所在的位置。
-
它在调试模式 F:\TestWorkSpace\SQLiteTest\bin\Debug 下提供了我的 bin 目录,并且有一个 x86 文件夹,其中包含 SQLite.Interop.dll。 SQLite 说它会查看 x86 文件夹
-
当我调试时,虽然我选择了“prefer 32 bit”...它尝试在x64下加载。 "正在尝试加载本机 SQLite 库 "F:\TestWorkSpace\SQLiteTest\bin\Debug\x64\SQLite.Interop.dll"..."
-
尝试将 32 位 SQLite.Interop.dll 放在 \bin\Debug\ 目录中。它必须看到你仍然在一台 64 位机器上,所以它会尝试运行 64 位机器,但因为它是 32 位进程而无法运行?
-
在这种情况下它可以工作。但我想同时编译 x86 和 x64。如果是 x86,它应该看起来 x86 文件夹如果它是 x64 应该看起来 x64