6

我编写了一个使用 sqlite 的应用程序,它在大多数系统上都运行良好。它是用 C# 编写的,唯一的非框架程序集是 sqlite,它包含在 System.Data.SQLite.dll 中。

我在所有机器上以相同的方式部署它(复制粘贴 exe 文件、数据库文件和 System.Data.SQLite 文件)。它适用于我所有的 PC 以及我尝试过的大多数 PC。

但是后来我得到报告,对于某些人来说,它会引发以下异常:

无法加载文件或程序集 'System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' 或其依赖项之一。试图加载格式不正确的程序。

现在我已确定 dll 文件与应用程序 exe 文件位于同一文件夹中。它是相同的 dll,具有与上述异常消息中所述相同的版本。

我真的很困惑,所以我创建了一个新的虚拟机,在上面安装了 windows 7 专业版,然后复制粘贴了文件,事情就成功了。因此,如果它可以在新的 Windows 上运行,我无法想象其他 PC 可能会丢失什么......

注意:项目引发异常的其中两台机器也在运行 windows 7 proffesional。

我真的很感激这方面的任何帮助,因为我刚刚没有想法......

4

3 回答 3

12

这是一种可能性:工作机器和不工作机器之间的区别是 32 位还是 64 位?您是在为“任何 CPU”而构建,而您应该只为外部 DLL 的位数而构建?

于 2009-10-25T19:18:36.887 回答
1

引发异常的机器可能正在运行 64 位版本的 Windows,并且您的程序正在使用 AnyCPU 配置。System.Data.SQLite DLL 是一个两面的野兽:托管部分和本地部分。可能是本机部分负责异常。

有关更多信息,请参阅此问题

于 2009-10-25T19:19:41.813 回答
1

您是否检查过目标系统是 64 位还是 32 位?

您的依赖项之一可能需要 32 位版本的 Windows。要解决此问题,您可以在 C# 项目的属性中指定平台目标:选择 x86 而不是 Any CPU。

于 2009-10-25T19:20:27.497 回答