在Sqlite.net PCL中找不到SQLitePlatformIOS

本文关键字:找不到 SQLitePlatformIOS PCL Sqlite net | 更新日期: 2023-09-27 18:13:24

我使用nuget包管理器下载这个包

示例如下:

public class SQLiteFactoryiOS : ISQLiteFactory
{
    public SQLite.Net.SQLiteConnection CreateConnection(string dbName)
    {
        var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), dbName);
        return new SQLite.Net.SQLiteConnection(new SQLitePlatformIOS(), path);
    }
}

我面临的问题是,我不能引用SQLitePlatformIOS。我甚至在源代码中找到了它,但是我无法到达.Platform名称空间,因此我无法创建SQLitePlatformIOS对象。

 using SQLite.Net; //.Platform.XamarinIOS <-- Compiler error if I try to reach this

我用来引用的项目是一个可移植类项目,因为在references文件夹中我看到了。net portable子集。

项目结构为

iOS MainProject引用示例可移植项目示例可移植项目引用SQLite。Net-PCL

在Portable Project中我有

References
     .NET Portable Subset
     From Packages
          SQLite.Net
Packages
     SQLite.Net-PCL
Data
     Repositories
           ExampleRepository.cs

我的示例库是

using System;
using Example.Data.DTO;
using Example.Models.Properties;
using SQLite.Net;
namespace Example.Data.Repositories
{
    public class ExampleRepository(string dbPath)
    {
        using (var db = new SQLite.Net.SQLiteConnection(new SQLitePlatformIOS() /* Can't reference */, dbPath))
        {
             db.CreateTable<ExampleDTO>();
        }
    }
}
我从iOS项目中调用这个类
partial void SaveObject(NSObject sender)
{
    var objectToSave = CreateObjectFromView();
    var dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Test.db3");
    var repo = new ExampleRepository(dbPath);
}

在Sqlite.net PCL中找不到SQLitePlatformIOS

你找不到iOS实现参考的原因是你无法访问PCL中特定平台的代码。事实上,你不需要它。你在PCL内部所需要的只是接口,特定的代码将使用DI框架注入,因此PCL为每个平台使用适当的代码,而不必在运行时检查你使用的是哪个平台。

在这里你可以看到一个关于依赖注入如何工作的例子(它甚至使用SQLite)

是的,. platform命名空间已经从SQLite中消失了。Net PCL包。

解决方法是从https://github.com/oysteinkrog/SQLite.Net-PCL下载源代码,然后自己构建二进制文件。为此,在Xamarin Studio中打开解决方案(在输入此内容时,我在5.10.3 Build 51上),将模式更改为发布(不针对任何特定硬件),然后单击Build -> Build All

然后在Xamarin Studio中打开您的iOS项目,右键单击References文件夹并选择Edit References...,然后单击.Net Assembly选项卡,单击Browse...并浏览到您刚刚构建的SQLite.Net.Platform.XamarinIOS.Unified.dll文件的位置。应该在SQLite.Net-PCL-master/SQLite.Net.Platform.XamarinIOS.Unified/bin/Release

虽然是2014年的老帖子,但我找到了SQLite。Net PCL GitHub链接来自https://forums.xamarin.com/discussion/28916/error-while-trying-to-install-sqlite-net-platform-xamarinios-2-4-1-please-help(参见JuhaPehkonen的2014年12月的帖子)

关于在Xamarin Studio中添加引用的更多信息可以在这里找到:如何将库添加到Xamarin引用列表