在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);
}
你找不到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引用列表