首页 > 解决方案 > 尝试在 C# 中访问 Sqlite 数据库

问题描述

错误信息:

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

我确实对这个错误进行了很多搜索,并得到了一些解决这个问题的方法,但没有一个能帮助我解决这个错误。

当我编写代码以连接到具有 64 位兼容性的 Sqlite 数据库时,一切顺利,但我无法解决使用NuGet包使用的 32 位兼容性的错误:

using system.data.SQlite

我还无法编写大型代码,我只是计算 Sqlite 数据库中表中存在的记录。

任何帮助将不胜感激!

PS:很抱歉在同一个问题上创建了一个新线程(如果我真的这样做了)。

标签: c#sqlite

解决方案


如果我们将 C# 应用程序构建为 x86 程序集,那么我们将在 x64 Windows 机器上运行它。我们会有问题。在客户/目标 64 位机器上,由于启动进程的可执行文件完全由托管代码组成,它将使用机器的本机处理器架构运行,这将是 x64 机器上的 x64。稍后,这将导致包含为 x86 编译的任何本机代码的程序集(例如,System.Data.SQLite.dll混合模式程序集、本SQLite.Interop.dll机互操作程序集或本sqlite3.dll机库)无法加载,通常会导致BadImageFormatException被抛出。

您的项目文件夹结构:

<bin>\App.exe (required, managed-only application executable assembly)
<bin>\App.dll (optional, managed-only application library assembly)
<bin>\System.Data.SQLite.dll (required, managed-only core assembly)
<bin>\x86\SQLite.Interop.dll (required, x86 native interop assembly)
<bin>\x64\SQLite.Interop.dll (required, x64 native interop assembly)

编辑 :

注意:您将在您正在使用的 .NET 目标的二进制 zip 文件中找到互操作 DLL。

有用的参考资料:

1)针对任何 CPU 的 C# 应用程序的 SQLite 配置

2)用于 x86/x64 架构的 SQLite dll

3)在 C# 中使用 SQLite

4)在 32 位和 64 位 C# 世界中使用 System.Data.SQLite 的选项


推荐阅读