Xamarin与实体框架核心:错误:在Android 7上未经授权访问“/system/lib/libsqlite.so”

时间:2017-04-03 06:12:31

标签: sqlite xamarin.android entity-framework-core

我正在尝试使用新的Entity Framework Core创建一个Xamarin Forms App。该应用程序针对Android 6.0但我的模拟器运行的是Android 7.0。我在android项目上安装了以下相关的Nuget包:

  • Microsoft.EntityFrameworkCore - > 1.1.1
  • Microsoft.EntityFrameworkCore.Sqlite - > 1.1.1

在Android上访问我的DbContext时,会弹出一条消息:检测到本机库未经授权访问“/system/lib/libsqlite.so”的问题。

This Xamarin论坛帖子暗示,这是由于原生SqLite二进制文件不再受支持(在Android 7上?),常见修复似乎是切换到SqLite.Net PCL。

然而,由于Microsoft.EntityFrameworkCore.Sqlite依赖于Microsoft.Data.Sqlite,而后者依赖于本机SqLite包,我不能只替换它(或者我可以吗?)

奇怪的是,尽管有错误信息提示,否则数据访问似乎有效。至少运行迁移并重复写入数据库将创建新的ID。

当然我可以废弃EF Core,但我想很多人将来会考虑将它用于Xamarin。如果有人能找到/知道修复就好了。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我使用以下库修复了这个问题:sqlite-net-pcl(版本1.2.0),SQLitePCLRaw.bundle_green,SQLitePCLRaw.core,SQLitePCLRaw.lib.e_sqlite3.android,SQLitePCLRaw.provider.e_sqlite3.android。

答案 1 :(得分:0)

Matheus Souza在那里有正确的想法。但是,安装SQLitePCL只是答案的一部分。以下是我最终解决这个问题的方法:

免责声明:这是一种“你可以做到,但它不漂亮” - 解决方案。如果你有时间,最好等待官方的Microsoft.EntityFrameworkCore.Sqlite 1.2.0版本。

This问题让我走上正轨。 EntityFrameworkCore的新(未发布)版本不再使用本机sqlite二进制文件,而是使用sqlite-net-pcl。这是我安装它的步骤:

  1. aspnetcore-dev branch添加到您的nuget供稿中。 Nuget 3:https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json

  2. 在Nuget中选中“显示预览版本”并将所有EntityFrameworkCore包更新(或重新安装)为“1.2.0 - preview”

  3. (如果应用程序在部署时立即崩溃,请确保在Android项目高级构建选项中检查x64。这可能是未发布的)