在多个平台(ARM、x64和x86)上使用Sqlite的更好方法
本文关键字:Sqlite 方法 更好 x86 平台 ARM x64 | 更新日期: 2023-09-27 17:50:21
我使用Visual Studio 2012作为一个典型的LOB应用程序。这个应用程序有DAL, BLL和UI层。
所有项目,除了Sqlite,都是基于可移植类库(PCL),所以我可以编译一次,它们适用于所有平台。
但是数据库是Sqlite。Sqlite使用本机代码,因此我需要为每个平台部署一个包。例如,当我需要为ARM处理器部署时,我需要为ARM重新编译所有项目(超过20个),因为Sqlite被放置在较低的层。大多数项目都直接或间接地依赖于Sqlite所在的数据库。
解决这种情况的最佳方法是什么?
谢谢
看看这个关于。net SQLite的网页。
SQLite.dll有一个独立于平台的版本。它将动态加载具有特定于平台的本机代码的附加DLL。他们建议如下的目录布局(在您的应用程序目录中):
System.Data.SQLite.dll (required, managed-only core assembly)
System.Data.SQLite.Linq.dll (optional, managed-only LINQ assembly)
x86'SQLite.Interop.dll (required, x86 native interop assembly)
x64'SQLite.Interop.dll (required, x64 native interop assembly)
在您的项目中,您只能添加与平台无关的、仅受管理的DLL。因此,只需编译一次,它就可以在所有平台上运行。从托管dll到本机dll之间没有硬链接。
希望这种方法可以扩展到ARM架构。
请不要,该页还包含混合模式程序集,程序集动态链接到一些VC运行时库等。你会想要避开它们。
一旦你在应用中包含了一个本地库,你就需要为每个平台构建一个单独的包,以便每个平台都包含适合该平台的库。
如果你还没有使用SQLite的Windows运行时Visual Studio扩展,你应该。它将SQLite作为扩展添加到添加引用对话框中。如果您从那里将它添加到您的项目中,则每次构建时都会自动包含正确项目的本机库。
要从。net访问本机库,可以使用与平台无关的sqlite-net。
因为你正在使用PCL,所以你可能不会只为WinRT编写应用程序。在这种情况下,答案可能并不完全适用,但我需要更多的信息来给你更具体的建议。