x86 DLL 有效但 x64 DLL 无效

x86 DLL Works But Not x64 DLL

我正在尝试将 System.Data.SQLite 包含在我的项目中,该项目使用 C# 编码并使用 .NET Framework v4。我有点困惑...我是 运行 Windows 8.1 x64,项目的平台目标设置为 Any CPU。如果我包含 System.Data.SQLite.dll 的 x64 版本,则会收到一条错误消息 The type or namespace name 'SQLite' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)。但是,如果我包含 System.Data.SQLite.dllx86 版本,那么它可以正常编译。不应该反过来吗(x86 版本不应该编译)?由于 x86 版本有效,那么我可以在编译的项目中只包含 x86 版本吗?如果我需要包含 System.Data.SQLite.dll(以及 SQLite.Interop.dll)的 x86 和 x64 版本,那么我该怎么做呢?我还应该注意 System.Data.SQLite 的版本是 v1.0.94.0(适用于 .NET Framework 4)。

除非您需要 x64 版本,否则您可以只包含 x86 版本并将您的项目构建为 x86。这对大多数项目都是安全的,除非您需要 64 位地址 space.

只有当您的应用程序是纯托管的并且不依赖于特定架构时,您才应该使用 AnyCPU。使用 SQLite 等本机代码时,应用应始终设置特定的平台目标。

x86 版本的 SQLite 而不是 x64 的原因是在 Visual Studio 的现代版本中,AnyCPU 配置默认为 /platform:anycpu32bitpreferred 而不是 /platform:anycpu。使用 anycpu32bitpreferred,应用程序将尽可能使用 32 位模式,并且仅当 32 位模式不可用时才使用 64 位模式。

对于这种情况,没有比 Nuget 更好的技术了!您可以直接使用 SqlLite nuget package,它与 x86/x64 明确兼容。我在AnyCpu、x86和x64上都试过了,两种情况下我都没有编译错误。

所以您只需删除旧的引用,右键单击项目引用,然后选择 "Manage NuGet Packages",然后搜索 System.Data.SQLite

此外,您将永远保持最新:)