C# '的类型初始值设定项;SQLite.SQLiteConnection';抛出异常

C# '的类型初始值设定项;SQLite.SQLiteConnection';抛出异常,c#,xamarin,xamarin.android,sqlite-net-pcl,C#,Xamarin,Xamarin.android,Sqlite Net Pcl,我正在尝试实现SQLite的一个难以置信的基本用法。我有一个按钮和一个编辑文本。我想存储EditTextOnClick的内容 我是这样说的: 及 我无法通过以下起始代码而不获得后续错误:var db=new-SQLiteConnection(dbPath) 错误: “SQLite.SQLiteConnection”的类型初始值设定项引发了异常 内部异常: 系统。例外:这是“诱饵”。您可能需要添加一个 SQLitePCLRaw.bundle_*nuget包到您的平台项目中。 在中的SQLitePC

我正在尝试实现SQLite的一个难以置信的基本用法。我有一个
按钮
和一个
编辑文本
。我想存储
EditText
OnClick
的内容

我是这样说的:

我无法通过以下起始代码而不获得后续错误:
var db=new-SQLiteConnection(dbPath)

错误:

“SQLite.SQLiteConnection”的类型初始值设定项引发了异常

内部异常:

系统。例外:这是“诱饵”。您可能需要添加一个 SQLitePCLRaw.bundle_*nuget包到您的平台项目中。
在中的SQLitePCL.batters_V2.Init()[0x00000]处 :0 at SQLite.SQLiteConnection..cctor()[0x00000]位于 /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>();
}
以下是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>

在所有项目(PCL、Android、iOS)中安装以下一个软件包 虽然它没有被维护,但它对我有效

然后编写以下特定于平台的代码,以获取每个平台中的数据库连接:

Android

public SQLiteConnection GetConnection()
{
     var dbName = "TestDB-DEV.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;
 }
iOS

public SQLiteConnection GetConnection()
{
    var dbName = "TestDB-DEV.db3";
    string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    string libraryPath = Path.Combine(folder, "..", "Library");
    var path = Path.Combine(libraryPath, dbName);
    var platform = new SQLite.Net.Platform.XamarinIOS.SQLitePlatformIOS();
    var connection = new SQLiteConnection(platform, path);

    return connection;
}
您将使用对SQLite.Net的引用,如下所示:

using SQLite.Net;

希望这有帮助

在我看来,PCL和Android项目中仍然缺少一些依赖项。下面是我在一个工作项目中所做的比较

以下是我在PCL packages.config中看到的内容:

...
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCL.bundle_green" version="0.9.3" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCL.raw" version="0.9.3" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.8" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="portable45-net45+win8+wpa81" />
...
...
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="monoandroid71" />
<package id="SQLitePCL.bundle_green" version="0.9.3" targetFramework="monoandroid71" />
<package id="SQLitePCL.plugin.sqlite3.android" version="0.9.3" targetFramework="monoandroid71" />
<package id="SQLitePCL.raw" version="0.9.3" targetFramework="monoandroid71" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.8" targetFramework="monoandroid71" />
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="monoandroid71" />
<package id="SQLitePCLRaw.lib.e_sqlite3.android" version="1.1.8" targetFramework="monoandroid71" />
<package id="SQLitePCLRaw.provider.e_sqlite3.android" version="1.1.8" targetFramework="monoandroid71" />
...
。。。
...
以下是我在Android packages.config中看到的内容:

...
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCL.bundle_green" version="0.9.3" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCL.raw" version="0.9.3" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.8" targetFramework="portable45-net45+win8+wpa81" />
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="portable45-net45+win8+wpa81" />
...
...
<package id="sqlite-net-pcl" version="1.4.118" targetFramework="monoandroid71" />
<package id="SQLitePCL.bundle_green" version="0.9.3" targetFramework="monoandroid71" />
<package id="SQLitePCL.plugin.sqlite3.android" version="0.9.3" targetFramework="monoandroid71" />
<package id="SQLitePCL.raw" version="0.9.3" targetFramework="monoandroid71" />
<package id="SQLitePCLRaw.bundle_green" version="1.1.8" targetFramework="monoandroid71" />
<package id="SQLitePCLRaw.core" version="1.1.8" targetFramework="monoandroid71" />
<package id="SQLitePCLRaw.lib.e_sqlite3.android" version="1.1.8" targetFramework="monoandroid71" />
<package id="SQLitePCLRaw.provider.e_sqlite3.android" version="1.1.8" targetFramework="monoandroid71" />
...
。。。
...

我不想把自己放在“我不知道我是怎么修好的”船上,但事情就是这样。我开始清理和复制+粘贴代码,重新包装Nuget软件包,一切正常。也许我一开始忽略了一些东西,也许版本不匹配,我不能说。但是,我尝试添加Trevor提到的依赖项,问题仍然存在,所以我不认为我遗漏了什么

我也遇到了同样的问题,删除“bin”和“obj”文件夹解决了它。

设法解决了它。问题是,我在两个不同的项目中使用Nuget软件包,而我只更新了其中一个使用SQLite Nuget和Clean的相同版本下载其他项目,重建解决了问题。

我通过将“SQLite net pcl”包降级到最新的稳定版本(v1.7.302-beta)修复了相同的问题→ 在我的例子中,我得到了错误,因为我丢失了Windows窗体应用程序“bin”文件夹中的“runtimes”文件夹

在存储可执行文件的文件夹下面应该有一个子文件夹层次结构,如下所示:

  • 运行时\win arm\native
  • 运行时\win-x64\native
  • 运行时\win-x86\native
在每个文件夹中,都有一个“e_sqlite3.dll”文件

在我将这些文件添加到可执行文件所在的文件夹后,错误消失了。
实际上,如果使用适当的SQLite NuGet软件包,文件会自动复制到输出文件夹中。

我已通过将sql net pcl库从1.7.302-beta降级到1.6.292版,然后重新生成,解决了此问题。如果不工作,请重新安装sqlite nuget。如果仍然不工作,请检查所有nugets ef sqlite等的版本(如果可以,请更新)

如果使用XF,则应遵循XF指南,而不是Android指南。看,我实际上是从那里开始的。那是我的第一个导游。我正在使用指南中显示的NuGet软件包。我很惊讶直到现在我才注意到这一点,但是“monoandroid60”重要吗?我的设备是API24,所以是“monoandroid70”。我想我会安装更新的SDK,看看是否有帮助。这与我读过的关于选择哪个Nuget软件包的所有建议背道而驰。我看到的每个示例都使用sqlite net pcl,而不是sqlite.net pcl。尽管如此,您的代码与sqlite net pcl不兼容。但是,如果没有更好的解决方案,我将测试完全卸载sqlite net pcl并安装sqlite.net pcl。有趣的是,我将添加那些缺少的包并进行检查。同样。。。花了一个小时的时间。。。当传递到VisualStudio2019时,没有出现相同的问题。我更新了nuget软件包,一切都很好。我有一个合理的答案:Microsoft。。。由黑猩猩为我们写的Chumpsimcrosoft。。由黑猩猩为我们写的chumpsI今天在使用指南时也有同样的问题,我回到了最新的马厩,它解决了我的问题