xamarin – 在Android 7上使用EF7 SQLite

在我的项目中,我使用的是NuGet的Microsoft.EntityFrameworkCore.SQLite包.但是对于
Android 7,该应用程序因未经授权访问“/system/lib64/libsqlite.so”而崩溃.

这是因为Android 7不允许除NDK之外的本地库(据我所知).另请参阅此问题:https://github.com/aspnet/EntityFramework/issues/7777.

所以,我现在研究了互联网大约2天,但未成功尝试了很多东西让EFCore在Android 7上工作.其中一个是更新到预览版v2.0.0-preview1-final.但这导致了其他问题,例如以下应用程序编译的问题,但在模拟器上部署/启动时崩溃:

06-21 09:58:18.970 D/Mono    ( 3632): Assembly Loader probing location: 'System.Runtime.CompilerServices.Unsafe'.
06-21 09:58:18.970 F/monodroid-assembly( 3632): Could not load assembly 'System.Runtime.CompilerServices.Unsafe' during startup registration.
06-21 09:58:18.970 F/monodroid-assembly( 3632): This might be due to an invalid debug installation.

然后我尝试手动将’System.Runtime.CompilerServices.Unsafe’NuGet包添加到我的项目中,但它没有解决问题.
我搞砸了很多,尝试不同的构建参数等,并且实际上在Android 7模拟器上使用EFCore的预览包运行应用程序.但是,在项目清理和重建之后,错误再次出现.

有关如何让EFCore Sqlite在Android 7上运行的任何帮助?

我使用Visual Studio 2017与Xamarin.Android 7.3.1.2

我创建了一个示例项目来重现这个问题:https://github.com/tipa/EFCoreSample – 基本上刚开始使用VS的基本Android模板并添加了Nuget包

最佳答案 我知道这是在两个多月前提出来的,你可能已经找到了解决方案,但我想发布我们如何设法解决这个问题.

我们正在使用EntityFrameworkCore和SQLite开发一个Xamarin.Forms应用程序.由于项目和公司政策,我们仅限于使用.NetStandard 1.6(我们将我们的PCL项目从.NetFramework迁移到.NetStandard以集成EntityFrameworkCore).

在此问题开始发生之后,我们通过执行以下操作设法解决了这个问题:

>在DAL项目中将“Microsoft.EntityFrameworkCore”和“Microsoft.EntityFrameworkCore.SQLite”从版本“1.1.1”更新为“2.0.0-preview1-final”(这是与.NetStandard 1.6一起使用的最新版本)(我们有一个单独的PCL项目,包含Context,UoW,Repositories和Models)
>在主Xamarin.Forms Android项目中仅更新“Microsoft.Data.Sqlite”(这会自动更新所需的依赖项)从版本“1.1.1”到“2.0.0-preview1-final”

EntityFrameworkCore版本2.x.x使用Android 7“批准”方式访问“libsqlite.so”文件,而版本1.x.x则不使用.

希望这对任何可能使用我们拥有的类似软件包的人都有帮助.

点赞