c# - 'SQLite.SQLiteConnection' 的类型初始值设定项引发异常

标签 c# xamarin xamarin.android sqlite-net-pcl

我正在尝试实现 SQLite 的令人难以置信的基本用法。我有一个 Button 和一个 EditText。我想存储 EditText OnClick 的内容。

我正在关注这个:https://developer.xamarin.com/guides/android/application_fundamentals/data/part_3_using_sqlite_orm/

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/databases/

如果不出现后续错误,我就无法通过以下起始代码:var db = new SQLiteConnection (dbPath);

错误:

The type initializer for 'SQLite.SQLiteConnection' threw an exception.

内部异常:

System.Exception: This is the 'bait'. You probably need to add one of the SQLitePCLRaw.bundle_* nuget packages to your platform project.
at SQLitePCL.Batteries_V2.Init () [0x00000] in <9baed10c674b49e0b16322f238b8ecc1>:0 at SQLite.SQLiteConnection..cctor () [0x00000] in /Users/vagrant/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但最终没有成功。

不幸的是,诸如“它只是有效”、“不确定我做了什么”、“清理/重建”之类的废话是我见过的唯一答案,例如上一个链接,其他 SO 帖子,如 Xamarin SQLite "This is the 'bait'"

这是我的 Android 项目的 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>

最佳答案

我讨厌让自己陷入“我不知道如何解决它”的困境,但事实就是这样。我开始清理并复制粘贴代码并重新拉回 Nuget 包,一切正常。也许我最初忽略了一些东西,也许版本不匹配,我不能说。但是,我尝试添加 Trevor 提到的依赖项,问题仍然存在,所以我认为我没有遗漏任何东西。

关于c# - 'SQLite.SQLiteConnection' 的类型初始值设定项引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46915404/

相关文章:

c# - System.Reflection.Assembly 不包含 'GetExecutingAssembly' 的定义

c# - 如何在 c# Xamarin 中实现 ios 委托(delegate)/数据源模式?

xamarin.android - 无法找到应用程序 Mono.Android.Platform.ApiLevel_24 或 Xamarin.Android.Platform

c# - Xunit Assert.Throws 中的异步 lambda 表达式

c# - 在windows服务中传递参数

ios - 在 iOS 应用程序上使用 xbuild 不会生成 ipa

c# - 将 native 移动开发与 Xamarin 相结合

xamarin - Xamarin Forms 中的 Android 占位符\提示文本

c# - 协助使用 rhino 模拟为方法编写单元测试

c# - 正则表达式:保留未知子字符串