将Xamarin iOS应用程序部署到物理设备

时间:2018-08-31 08:33:30

标签: c# ios iphone xamarin.ios

我使用Xamarin.Forms和.NET Shared Project 2.0开发了一个应用程序。 Android应用程序在模拟器和物理设备上均可正常运行,但iOS应用程序在模拟器上可正常运行,但不适用于物理设备。 问题在于创建上下文时连接到SQLite数据库。我的上下文类如下:

[Preserve(AllMembers = true)]
public class EmployeesContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }
    private string _databasePath;

    public EmployeesContext()
    {

    }

    public EmployeesContext(string databasePath)
    {
        _databasePath = databasePath;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite($"Filename={_databasePath}");
    }
} 

抛出异常的代码是

public bool DeleteAllEmployees()
    {
        try
        {
            using (var db = new EmployeesContext(DbPath))
            {
                SQLitePCL.Batteries.Init();
                db.Database.EnsureCreated();

                foreach (Employee e in db.Employees)
                {
                    db.Employees.Remove(e);
                    Console.WriteLine("deleted employee: " + e.CompanyID);
                }

                db.SaveChanges();

                return true;
            }
        }
        catch (Exception ex)
        {
            return false;
        }
    } 

当我初始化EmployeesContext时。 异常消息是:

{System.InvalidOperationException: A suitable constructor for type 'Microsoft.EntityFrameworkCore.Internal.DiagnosticsLogger1[Microsoft.EntityFrameworkCore.DbLoggerCategory+Infrastructure]' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.}

我已将链接器选项设置为“全部链接”,而我读过其他用户的文章,我必须将其设置为“不链接”,但是如果这样做,我将无法为物理设备构建,因为我得到了以下信息错误:

Could not AOT the assembly '/Users/apple/Library/Caches/Xamarin/mtbs/builds/My1stAidAppCompany.iOS/6ef11966ebc899886e5f8e58172f085a/obj/iPhone/Debug/mtouch-cache/Build/Microsoft.EntityFrameworkCore.dll'

我正在使用Microsoft.EntityFrameworkCore 2.1.0和sqlite-net-pcl 1.4.118访问数据库。 我试图升级和降级Microsoft.EntityFrameworkCore,但无法解决问题。

0 个答案:

没有答案