我正在尝试将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?)
。但是,如果我包含x86
System.Data.SQLite.dll
版本的System.Data.SQLite.dll
,则编译正常。不应该是相反的方式(不应该x86版本不编译)?由于x86版本可以工作,那么我可以在编译项目中只包含x86版本吗?如果我需要同时包含SQLite.Interop.dll
的x86和x64版本(以及System.Data.SQLite
)那么我该怎么做呢?我还应该注意{{1}}的版本是v1.0.94.0(适用于.NET Framework 4)。
答案 0 :(得分:7)
除非您需要x64版本,否则您只需包含x86版本并将项目构建为x86。除非您需要64位地址空间,否则这对大多数项目都是安全的。
只有当您的应用程序是纯粹管理且对特定体系结构没有任何依赖性时,才应使用AnyCPU。使用SQLite等本机代码时,应该始终设置特定的平台目标。
xite版本的SQLite而不是x64的原因是在Visual Studio的现代版本中,AnyCPU配置默认为/ platform:anycpu32bitpreferred而不是/ platform:anycpu。使用anycpu32bitpreferred,应用程序将尽可能使用32位模式,并且仅在32位模式不可用时才使用64位模式。
答案 1 :(得分:1)
对于这种情况,没有比Nuget更好的技术了!您可以直接使用SqlLite nuget package,它与x86 / x64明确兼容。我在AnyCpu,x86和x64中尝试过,在这两种情况下都没有编译错误。
因此,您只需删除旧的引用,右键单击项目引用,然后选择“管理NuGet包”,然后搜索System.Data.SQLite
。
此外,您将永远保持最新状态:)