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.