带有"任何cpu"编译选项的SQLite [未经检查时在64位机器上崩溃"更喜欢32位"选项]

Hip*_*nor 7 .net c# sqlite

我只是按照说明进行操作

SQLite的-ON-视觉工作室与 - 的NuGet-和易于说明

我能够编译样本C#appliation

"任何cpu"

选项.

但是当我运行应用程序时,如果我选择的话

"喜欢32位"

选项,我的应用程序崩溃:

"无法加载DLL"SQLite.Interop.dll"

如果我取消选中"prefer 32 bit"选项,它在我的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 OP)在System.Data.SQLite.SQLite3.StaticIsInitialized()在System.Data.SQLite.SQLiteLog.Initialize()在System.Data. SQLite.SQLiteFactory..cctor()---内部异常堆栈跟踪结束---在System.Data.SQLite.SQLiteFactory..ctor()

PS 3:

我注意到一件有趣的事情.虽然在视觉工作室它崩溃,当我运行我的程序exe,只需单击它,它的工作原理.

use*_*959 3

以管理员身份运行命令提示符。 cd进入包含 x64 .dll 的目录。然后输入:gacutil -i SQLite.Interop.dll。然后cd转到 x86 .dll 所在的目录。再次输入:gacutil -i SQLite.Interop.dll. 现在应该可以正常工作了。

其作用是将每个程序集安装到系统上的 GAC(全局程序集缓存)中。它根据编译方式(x86 或 x64)将它们放入正确的系统缓存目录中。这应该仅用于调试目的。

广汽 32 位与 64 位

对于客户端机器。分别针对 x86 和 x64 进行部署。当然,为每个文件添加正确的 .dll 版本。