在64位计算机上使用32位库时,SQLite3的解析错误

时间:2014-05-14 21:25:14

标签: c# windows visual-studio

我最近搬到了Windows 8.1 x64,现在我无法从Windows 7 x32次调试我的旧代码。因为我正在使用x32操作系统的DLL文件。是否有适配器或其他东西来避免这种障碍?

例如x32的sqlite3(System.data.SQlite.dll)可以在x32上调试,但在我的计算机上我不能再调试了。

2 个答案:

答案 0 :(得分:0)

如果您转到x64操作系统,那么您的.net进程现在可能选择以x64模式运行。如果是这种情况,那么你不能在64位进程中使用32位库(我希望你得到InvalidImageFormatException,但我不熟悉你提到的解析一个)。您可以在任务管理器中查看您的进程是32位还是64位,以确认是否属实。

此时,如果确认,您有两个选择:

  • 将库更新为64位版本。并非所有第三方图书馆都必须拥有64位版本,但很多版本都有。
  • 强制您的进程以32位模式运行。根据您拥有的VS版本,项目属性中较新的版本具有一个名为“prefer 32bit mode”的设置(不记得确切)。

答案 1 :(得分:0)

不确定这是否是这种情况,但是一旦x86 C#项目无法在x64上运行,我就遇到了类似的问题。问题是 Any CPU 设置。

首先, Any CPU 设置似乎是逻辑情况:毕竟,它意味着可以在x86和x64架构上运行。问题在于共享DLL。如果EXE是在 Any CPU 模式下编译的,则DLL是在 x86 模式下编译的。

当你在x86操作系统上运行它时,EXE在x86模式下执行(这是该架构中唯一的选项),DLL在x86模式下执行(因为它是这样编译的),一切正常。

但是当你在x64操作系统上运行它时,EXE在x64模式下执行 - 因为它是任何CPU ,所以你的操作系统可以在x64模式下运行它。但是DLL无法在x64模式下加载(它没有任何加载),因此我们遇到冲突并且无法加载。

假设您无法为所有DLL获取任何CPU 或x64版本,那么简单的解决方案是在x86模式下编译主EXE,以便在x64系统上强制进行x86仿真。