我正在尝试在pcl项目中的xamarin(C#)上构建一个sqlite数据库。我正在关注this教程。在Android实现(步骤5)上,我收到了以下错误:
错误CS0104'环境'是'Android.OS.Environment'和'System.Environment'之间的模糊参考AlarmSQLite.Android c:\ users \ thomas \ source \ repos \ AlarmSQLite \ AlarmSQLite \ AlarmSQLite.Android \ SQLite_Android。 cs 30 Active
错误CS0234命名空间“SQLite”中不存在类型或命名空间名称“Net”(您是否缺少程序集引用?)AlarmSQLite.Android c:\ users \ thomas \ source \ repos \ AlarmSQLite \ AlarmSQLite \ AlarmSQLite .Android \ SQLite_Android.cs 33活跃
我使用的是VisualStudio2017。我试图删除.Net并添加了System.Environment但我得到了更多和新的错误。 我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using SQLite;
using Xamarin.Forms;
using AlarmSQLite.Droid;
using System.IO;
[assembly: Dependency(typeof(SQLite_Android))]
namespace AlarmSQLite.Droid
{
public class SQLite_Android : ISQLite
{
public SQLite_Android() { }
public SQLite.SQLiteConnection GetConnection()
{
var dbName = "AlarmDB.db3";
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(documentsPath, dbName);
var platform = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
var connection = new SQLite.Net.SQLiteConnection(platform, path);
return connection;
}
}
}
教程中的一切都是一样的。我究竟做错了什么?谢谢!
新错误:
错误CS0234命名空间“SQLite”中不存在类型或命名空间名称“Platform”(您是否缺少程序集引用?)AlarmSQLite.Android C:\ Users \ Thomas \ source \ repos \ AlarmSQLite \ AlarmSQLite \ AlarmSQLite .Android \ SQLite_Android.cs 33活跃
错误CS0029无法将类型'SQLite.Net.SQLiteConnection'隐式转换为'SQLite.SQLiteConnection'AlarmSQLite.Android C:\ Users \ Thomas \ source \ repos \ AlarmSQLite \ AlarmSQLite \ AlarmSQLite.Android \ SQLite_Android.cs 36 Active < / p>
答案 0 :(得分:1)
错误CS0104: 环境来自'Android.OS.Environment'以及'System.Environment',因此给您带来歧义问题。只是将系统置于环境之前。
$var${$i}
错误CS0234:好像您还没有添加SQLite-Async Nuget Package。您必须在PCL以及Android项目和构建项目中添加它。
错误CS0234&amp; CS0029:确保在android和pcl项目中添加了以下两个nuget包。
然后,尝试使用Sqlite.Net而不是使用Sqlite。
你的最终守则应该是:
var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
不要忘记调整界面。应该是这样的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Xamarin.Forms;
using AlarmSQLite.Droid;
using System.IO;
using SQLite.Net;
using SQLite.Net.Async;
[assembly: Dependency(typeof(SQLite_Android))]
namespace AlarmSQLite.Droid
{
public class SQLite_Android : ISQLite
{
public SQLite_Android() { }
public SQLiteConnection GetConnection()
{
var dbName = "AlarmDB.db3";
var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var path = Path.Combine(documentsPath, dbName);
var platform = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
var connection = new SQLiteConnection(platform, path);
return connection;
}
}
}
注意:如果您不需要,可以省略Sqlite.Net.Async PCL参考。