System.DllNotFoundException auf Mono SQLite
Ich habe versucht, dies herauszufinden, in letzter Zeit. Es funktioniert auf meinem Windows-Rechner, wo ich von SQLite NuGet, aber...
Wenn ich System.Data.SQLite.dll
und SQLite.Interop.dll
gerade von meinem Windows-Rechner in Linux-server heißt es, dass SQLite.Interop.dll
nicht gefunden, aber ich bin sicher, dass ich es sehen, nächste rechts auf die ausführbare.
Dann habe ich versucht zu kompilieren System.Data.SQLite.dll
mit /p:UseInteropDll=false
, aber ohne Glück. Dieses mal heißt es, dass System.Data.SQLite.dll
nicht gefunden.
Was ist das "nicht gefunden" Geheimnis?
- Lile user3791372 sagte, stellt sich heraus, dass Sie brauchen, um build-System.Daten.SQLite unter Linux, da es keine pre-build-binaries zum download - finden Sie die detaillierten Anweisungen in diesem Artikel: blog.wezeku.com/2016/10/09/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
Mono.Data.SQLite.dll
auf Linux. Werfen Sie einen Blick auf die Mono-Handbuch SQLite unter Linux oder bauen System.Data.SQLite.dll auf Mono.Können Sie auch die Karte der DLL:
Keine code-änderungen notwendig. Sie können es selbst bauen.
apt-get install build-essentials unzip
unzip
undcd Source
,chmod +x
diecompile-interop-assembly-release.sh
bauen, shell-script, dann läuft es./compile-interop-assembly-release.sh
. - Es erschaffe eine.so
Datei in der../bin
- Verzeichnis..so
Datei in das Verzeichnis, in dem Ihre Anwendung inlibSQLite.Interop.dylib
- Datei (entspricht der.so
- Datei auf Linux) in das Programm-Verzeichnis kann nicht funktionieren. Stattdessen bin ich das kopierenlibSQLite.Interop.dylib
direkt in/Library/Frameworks/Mono.framework/Libraries/
Begann ich die Entwicklung in Windows, aber dann zog Sie die Anwendung auf Mono (Ubuntu 14), die ist, wo die SQLite-provider failed to load als OP beschrieben.
Hatte ich neu kompilieren zu müssen System.Data.SQLite.dll mit dem folgenden Befehl:
Aber nach dieser habe ich die folgende Ausnahme:
Um dies zu beheben, musste ich neu kompilieren zu müssen System.Data.SQLite.EF6.dll mit dem folgenden Befehl:
Nach dem kopieren alle generierten Dateien zu Mono-Projekt-Verzeichnis bin, hat alles geklappt.
Die SQLite-provider-source-code-version, die ich benutzt hatte war 1.0.98.1.
Hoffe, das spart jemand viel Zeit...
Ich habe versucht, alle der oben genannten option, aber diese Optionen nicht lösen konnte, SQLite DLL problem, Es kann sein, weil ich bin mit ubuntu-18-version, Also versucht, andere option und hier die Schritte,
1) Download SQLite Quellcode aus dem https://system.data.sqlite.org/downloads/1.0.111.0/sqlite-netFx-full-source-1.0.111.0.zip
2) entpacken Sie die Quelle code und cd zu entpacken Verzeichnis
3) Führen Sie den folgenden Befehl in das terminal,
xbuild /p:Configuration=Release /p:UseInteropDll=false /p:UseSqliteStandard=true ./System.Daten.SQLite/System.Daten.SQLite.2010.csproj
4) Obige Befehl würde das erstellen einer dll-Datei unter folgenden Pfad,
sqlite-netFx-full-source-1.0.111.0/bin/2010/ReleaseMonoOnPosix/bin
5) Kopieren System.Data.SQLite.dll zu Ihrem Projekt-Ordner "bin".
6) Reinigen Sie das Projekt und erstellen Sie Sie erneut.
Ich hoffe, dass dies helfen würde.
Beginnend mit System.Daten.SQLite.Kern 1.0.109 Sie nicht brauchen, um alles kompilieren zu sich selbst, da die native
SQLite.Interop.dll
- Dateien sind in der NuGet-Paket für alle Plattformen (Linux, macOS und Windows). Beachten Sie, dass obwohl diedll
Erweiterung wird für alle Plattformen, die Dateien werden eigentlich native dynamische Bibliotheken (in der Regel mit dem Suffix dylib auf macOS und so auf Linux).Leider MSBuild target-verantwortlich für das kopieren der native dynamische Bibliotheken in das Ausgabe-Verzeichnis funktioniert nur auf Windows. Dies ist wahrscheinlich, weil die Autoren des Pakets ausgegangen .NET Framework nur auf Windows läuft, das ist nicht wahr Dank Mono. Auch, wenn Sie wanto auf einen Blick zu haben, die
CopySQLiteInteropFiles
Ziel kann gefunden werden in~/.nuget/packages/system.data.sqlite.core/{version}/build/net4*/System.Data.SQLite.Core.targets
.Aber es ist möglich, kopieren Sie automatisch die
SQLite.Interop.dll
- Datei in die Ausgabe-Verzeichnis auf Linux und macOS. Fügen Sie dieFixSQLiteInteropFilesOnLinuxAndOSX
Ziel (unten beschrieben) in Ihrem csproj-Datei, und Sie werden in der Lage sein zu System verwenden.Daten.SQLite.Core auf Linux und macOS läuft, mono, ohne dieDllNotFoundException
. Hier ist, wie Ihr Projekt Aussehen soll:Stellen Sie sicher, dass Sie
GeneratePathProperty="true"
im Paket Referenz. Dies ist erforderlich für diePkgSystem_Data_SQLite_Core
- Eigenschaft definiert werden.