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

时间:2013-07-24 12:27:27

标签: c# .net sqlite

我只是按照

的说明进行操作

SQLite-on-Visual-Studio-with-NuGet-and-Easy-Instructions

我可以用

编译样本C#appliation
  

“any 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时,只需单击它就可以了。

1 个答案:

答案 0 :(得分:3)

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

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

GAC 32bit vs. 64bit

对于客户端计算机。为x86和x64进行部署。当然,为每个.dll投入适当版本的.dll。