带有“;任何cpu”;编译选项[未选中时在64位机器上崩溃“首选32位”选项]

本文关键字:机器 64位 崩溃 32位 选项 首选 编译选项 cpu 任何 带有 | 更新日期: 2023-09-27 18:24:36

我只是按照的指示

使用NuGet和Easy Instructions 的Visual Studio上的SQLite

我可以用编译示例C#应用程序

"任意cpu"

选项。

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

"首选32位"

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

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

如果我取消选中"首选32位"选项,它在我的64位机器上运行良好

为什么会发生这种情况?有什么建议吗?

附言:我使用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(SQLiteConfigOpsNum-op)位于System.Data.SQLite.SQLite3.StaticIsInitialized()位于System.Data.SQLite.SQLiteLog.Initialize()位于System.Data.SQLite.SQLiteFactory.cctor()---内部异常堆栈跟踪结束---在System.Data.SQLite.SQLiteFactory.ctor()

PS 3:

我注意到一件有趣的事情。尽管在视觉工作室它是疯狂的,当我运行我的程序exe时,只需点击它,它就可以工作了。

带有“;任何cpu”;编译选项[未选中时在64位机器上崩溃“首选32位”选项]

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

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

GAC 32位与64位

对于客户端计算机。分别为x86和x64执行部署。当然,为每一个都添加正确版本的.dll。