【发布时间】:2019-08-08 05:17:01
【问题描述】:
我在物理设备上使用带有 SQLite 的 EntityFrameworkCore 时遇到问题。它在 iPhone xR 模拟器上没有任何问题,但在 iPhone 6 模拟器或物理设备上却没有。但据我所知,它在 Android 上运行良好。
问题在于,当调用 EnsureCreatedAsync() 方法时,应用程序崩溃了(它甚至没有展开到我已经捕获的问题),并出现以下错误:
在屏幕截图中,此方法在上下文的构造函数中被调用,尽管我尝试将其移动到异步方法并等待它,但会出现同样的问题。这是我的上下文的代码:
public class Database : DbContext
{
public Database()
{
try
{
Database.EnsureCreatedAsync();
}
catch (Exception ex)
{
Debug.Write(ex.Message);
}
}
public DbSet<TextRecordModel> TextRecords { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
String databasePath = "";
switch (Device.RuntimePlatform)
{
case Device.iOS:
SQLitePCL.Batteries_V2.Init();
databasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "..", "Library", "TestDB.db");
break;
case Device.Android:
databasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "TestDB.db");
break;
default:
throw new NotImplementedException("Platform not supported");
}
optionsBuilder.UseSqlite($"Filename={databasePath}");
}
public async Task<bool> SaveTextRecordAsync(TextRecordModel record)
{
try
{
await TextRecords.AddAsync(record);
await SaveChangesAsync();
return true;
}
catch
{
return false;
}
}
public async Task<List<TextRecordModel>> GetTextRecordsAsync()
{
return await TextRecords.ToListAsync();
}
}
我也将整个项目放到了 Github 上,the code is here,以防有人想看。
我正在运行 Xamarin Forms 4.1 和 Microsoft.EntityFrameworkCore.Sqlite 2.2.6。为了排除链接器问题,我将链接器行为设置为“不链接”,但这没有任何区别。我还尝试在此之前添加一行以将一个小文本文件写入数据库位置,以排除任何文件系统或权限问题,这没有问题。
我无法在设备日志中找到任何错误,但在调试模式下运行时从堆栈跟踪中得到以下信息:
2019-08-16 07:08:01.337 SQLiteTest.iOS[32921:2851415] error: Failed to load AOT module 'data-0x112ed8000.so' in aot-only mode.
=================================================================
Native Crash Reporting
=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
=================================================================
Basic Fault Adddress Reporting
=================================================================
Memory around native instruction pointer (0x1941610cc):0x1941610bc fd 7b c1 a8 c0 03 5f d6 10 29 80 d2 01 10 00 d4 .{...._..)......
0x1941610cc c3 00 00 54 fd 7b bf a9 fd 03 00 91 3f d5 ff 97 ...T.{......?...
0x1941610dc bf 03 00 91 fd 7b c1 a8 c0 03 5f d6 90 29 80 d2 .....{...._..)..
0x1941610ec 01 10 00 d4 c3 00 00 54 fd 7b bf a9 fd 03 00 91 .......T.{......
=================================================================
Native stacktrace:
=================================================================
0x105f84d18 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x105f7b1d8 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x1941d44f0 - /usr/lib/system/libsystem_platform.dylib : <redacted>
0x1941d8a88 - /usr/lib/system/libsystem_pthread.dylib : pthread_kill
0x1940ba14c - /usr/lib/system/libsystem_c.dylib : abort
0x1060f3e0c - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : xamarin_find_protocol_wrapper_type
0x1060d3f34 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x1060d3f84 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f61a90 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x105fb72b8 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105fb3104 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105fee7b0 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x100b1b094 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x100b1b1c4 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x100b1b158 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x100b1af7c - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x100ca988c - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x10129d2bc - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x105f8bc84 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x10602e450 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f9767c - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f96b44 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f96c84 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f96c84 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f9c600 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f95610 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105fadd70 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f941f8 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x1013102b4 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x1009ccabc - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x10129d2bc - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x105f8bc84 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x10602ca98 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x1060320e4 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : mono_pmip
0x105f701a0 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x106103628 - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : xamarin_localized_string_format_9
0x1009cc9cc - /var/containers/Bundle/Application/06702566-C641-4954-A671-29967CE5DF53/SQLiteTest.iOS.app/SQLiteTest.iOS : (null)
0x194014fd8 - /usr/lib/system/libdyld.dylib : <redacted>
=================================================================
Managed Stacktrace:
=================================================================
at <unknown> <0xffffffff>
at System.AppDomain:LoadAssemblyRaw <0x00007>
at System.AppDomain:Load <0x00053>
at System.AppDomain:Load <0x00047>
at System.AppDomain:Load <0x0003b>
at System.Reflection.Assembly:Load <0x0003b>
at System.Object:runtime_invoke_dynamic <0x0011b>
at <unknown> <0xffffffff>
at SQLiteTest.iOS.Application:Main <0x0006b>
at System.Object:runtime_invoke_dynamic <0x0011b>
=================================================================
这可能是什么原因造成的,解决办法是什么?
【问题讨论】:
-
你更新iOS或IDE的版本了吗?您可以删除iOS项目中的文件夹bin和obj,然后清理并重建它。
-
据我所知,我随后在所有项目中升级了 Xamarin.Forms 的版本(以解决不同的问题),现在问题似乎已经消失了......?跨度>
-
否定,问题没有消失。
-
清理和重建使该错误消失。但现在我不断得到价值不能为空。参数名称:调用 EnsureCreatedAsync 时的键
-
请阅读this。没有外部链接,问题应该是可以理解的。大多数用户(包括我)都不会对在 github 上仔细检查一个完整的项目感兴趣,即使它很小,更不用说尝试运行它了,可能缺少一些必需的依赖项。从问题文本中应该可以清楚地看出失败代码在何时何地运行。
标签: sqlite xamarin xamarin.forms xamarin.ios entity-framework-core