我正在尝试实现对SQLite的难以置信的基本使用。我有一个Button
和一个EditText
。我想存储EditText
OnClick
的内容。
我正在跟踪这个:orm/
和https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/databases/
在没有后续错误的情况下,无法传递以下启动代码:var db = new SQLiteConnection (dbPath);
错误:
“SQLite.SQLiteConnection”的类型初始化程序引发了一个异常。
内部例外:
System.Exception:这是“诱饵”。您可能需要向平台项目中添加一个SQLitePCLRaw.bundle_* nuget包。 在SQLitePCL.Batteries_V2.Init () 0x00000在<9baed10c674b49e0b16322f238b8ecc1>:0中的SQLite.SQLiteConnection..cctor () 0x00000在/Users/迷航/git/src/SQLite.cs:169}
我已经在PCL和Android项目上安装了NuGet包。我看到安装了以下软件包:
SQLitePCLRaw.provider.e_sqlite3.android
SQLitePCLRaw.lib.e_sqlite3.android
我试过安装:
SQLitePCLRaw.bundle_e_sqlite3
如前所述,代码是最基本的实现:
try
{
string dbPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "TestDB-DEV.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<PersonName>();
}
我在这方面花了几天时间,尝试了许多资源,比如:https://forums.xamarin.com/discussion/87289/sqlite-net-pcl-bait-issue,但最终没有成功。
不幸的是,像“它只是起作用”、“不知道我做了什么”、“清理/重建”这样的无稽之谈是我看到的唯一答案,例如以前的链接,其他类似Xamarin SQLite "This is the 'bait'"的帖子
这是我的安卓项目的package.config
:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.core" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.lib.e_sqlite3.android" version="1.1.5" targetFramework="monoandroid60" />
<package id="SQLitePCLRaw.provider.e_sqlite3.android" version="1.1.5" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Design" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v4" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.CardView" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.MediaRouter" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Vector.Drawable" version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Forms" version="2.4.0.282" targetFramework="monoandroid60" />
</packages>
以下是PCL项目的package.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.5" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.core" version="1.1.5" targetFramework="portable45-net45+win8+wpa81" />
<package id="Xamarin.Forms" version="2.3.4.247" targetFramework="portable45-net45+win8+wpa81" />
</packages>
发布于 2017-10-31 23:25:43
我不想把自己放在“我不知道怎么修好它”的船上,但事情就是这样发生的。我开始清理和copy+pasted的代码,并重新提取Nuget包和所有的工作刚刚开始。也许我一开始忽略了一些东西,也许有版本错配,我不能说。但是,我尝试添加Trevor提到的依赖项,问题仍然存在,所以我认为我没有遗漏任何东西。
发布于 2019-11-21 09:18:21
我通过将"sqlite-net-pcl"包降级到最后一个稳定版本(v1.7.302-beta→v1.6.292)解决了同样的问题。
发布于 2020-01-21 12:03:04
在我的例子中,我得到了错误,因为我丢失了Windows窗体应用程序的"bin“文件夹中的”运行时“文件夹。
在存储可执行文件的文件夹下面应该有这样的子文件夹等级:
每个文件夹中都有一个"e_sqlite3.dll“文件。
在我将这些文件添加到可执行文件所在的文件夹后,错误就消失了。实际上,如果使用适当的SQLite NuGet包,则会自动复制输出文件夹。
https://stackoverflow.com/questions/46915404
复制相似问题