Fehlermeldung "Methode nicht gefunden" beim Zugriff auf SQLite-Datenbank

Beim Zugriff von einem .NET-Programm aus auf eine SQLite-Datenbank, mit dem „sqlite-net-pcl“-NuGet-Paket, habe ich folgende Fehlermeldung erhalten:

System.MissingMethodException: Methode nicht gefunden: "System.String SQLitePCL.raw.sqlite3_column_name(SQLitePCL.sqlite3_stmt, Int32)

Ursache

Ich habe zu neue NuGet-Pakete eingebunden.

Das ist der Ausschnitt meiner „packages.config“-Datei:

<package id="sqlite-net-pcl" version="1.6.292" targetFramework="net472" /> 
<package id="SQLitePCLRaw.bundle_green" version="2.0.1" targetFramework="net472" /> 
<package id="SQLitePCLRaw.core" version="2.0.1" targetFramework="net472" /> 
<package id="SQLitePCLRaw.lib.e_sqlite3" version="2.0.1" targetFramework="net472" /> 
<package id="SQLitePCLRaw.lib.e_sqlite3.linux" version="1.1.14" targetFramework="net472" /> 
<package id="SQLitePCLRaw.lib.e_sqlite3.osx" version="1.1.14" targetFramework="net472" /> 
<package id="SQLitePCLRaw.lib.e_sqlite3.v110_xp" version="1.1.14" targetFramework="net472" /> 
<package id="SQLitePCLRaw.provider.dynamic_cdecl" version="2.0.1" targetFramework="net472" /> 
<package id="SQLitePCLRaw.provider.e_sqlite3.net45" version="1.1.14" targetFramework="net472" />

Lösung

Als ich die NuGet-Pakete via allowedVersions begrenzt hatte, lief mein Code korrekt:

<package id="sqlite-net-pcl" version="1.3.1" targetFramework="net472" allowedVersions="(,1.3.1]" /> 
<package id="SQLitePCLRaw.bundle_green" version="1.1.14" targetFramework="net472" allowedVersions="(,2.0)" /> 
<package id="SQLitePCLRaw.core" version="1.1.14" targetFramework="net472" allowedVersions="(,2.0)" /> 
<package id="SQLitePCLRaw.lib.e_sqlite3.linux" version="1.1.14" targetFramework="net472" allowedVersions="(,2.0)" /> 
<package id="SQLitePCLRaw.lib.e_sqlite3.osx" version="1.1.14" targetFramework="net472" allowedVersions="(,2.0)" /> 
<package id="SQLitePCLRaw.lib.e_sqlite3.v110_xp" version="1.1.14" targetFramework="net472" allowedVersions="(,2.0)" /> 
<package id="SQLitePCLRaw.provider.e_sqlite3.net45" version="1.1.14" targetFramework="net472" allowedVersions="(,2.0)" />

Ich vermute, die neuere Version der Bibliothek bringt irgend etwas mit den internen Versionen durcheinander, leider.

Alternative Lösung

Wenn ich in Visual Studio bei NuGet die Option „Include prerelease“ aktiviere, dann lädt er neuere Versionen herunter:

<package id="sqlite-net-pcl" version="1.7.302-beta" targetFramework="net48" />
<package id="SQLitePCLRaw.bundle_green" version="2.0.2-pre20191003102319" targetFramework="net48" />
<package id="SQLitePCLRaw.core" version="2.0.2-pre20191003102319" targetFramework="net48" />
<package id="SQLitePCLRaw.lib.e_sqlite3" version="2.0.2-pre20191003102319" targetFramework="net48" />
<package id="SQLitePCLRaw.lib.e_sqlite3.linux" version="1.1.14" targetFramework="net48" />
<package id="SQLitePCLRaw.lib.e_sqlite3.osx" version="1.1.14" targetFramework="net48" />
<package id="SQLitePCLRaw.lib.e_sqlite3.v110_xp" version="1.1.14" targetFramework="net48" />
<package id="SQLitePCLRaw.provider.dynamic_cdecl" version="2.0.2-pre20191003102319" targetFramework="net48" />
<package id="SQLitePCLRaw.provider.e_sqlite3.net45" version="1.1.14" targetFramework="net48" />

Danach läuft das Programm auch durch.