SQLite auf C# - Cross-Plattform-Anwendungen
Kann jemand helfen/mich führen, mit der Verwendung von SQLite-lib auf Linux (MONO) und Windows (.NET)
Unter linux verwende ich native mono sqlite-client, und auf windows benutze ich http://sqlite.phxsoftware.com/
gibt es eine Möglichkeit zu definieren 'mit der' Richtlinien, wie diese :
#if (linux)
using Mono.Data.Sqlite;
#else
using System.Data.SQLite;
Ein weiteres problem ist die kleine differencies auf beiden Implementierungen, wie :
cmd = new SqliteCommand(); //mono
cmd = new SQLiteCommand(); //sqlite.phxsoftware.com
Warten für jede Hilfe
Wenn Sie wissen, besser oder einfacher Weg, dies zu tun, es wird sehr dankbar für die info.
Dank
- Warum würden Sie 2 verschiedene Baugruppen zu führen Sie die gleichen Sachen?
- es gibt keine Mono.Daten.Sqlite auf .net, also musste ich. phxsoftware.com irgendwie nicht wollen, zu laden unter linux.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie csharp-sqlite, die eine Portierung auf C# - Sql-Lite. Es ist sehr aktiv und basiert auf der version 3.6.22 von SqlLite. Siehe Miguel Kommentare über die versuche, um zu versuchen, es zu beschleunigen.
Ich habe vor kurzem über das Problem zu: erstellen einer Anwendung mit Sqlite unter Windows mit Visual Studio und bereitstellen, es auf einer Ubuntu-Server-box für die Produktion.
Die einfachste Lösung, die ich gefunden habe, ist die Verwendung der Mono-Treiber für Sqlite: Mono.Daten.Sqlite.
Dinge, die gewesen sein könnte ein wenig einfacher, aber es ist ein Fehler mit .Net 4.0, die noch nicht verpackt, die in den offiziellen Mono-Versionen.
So müssen Sie zum kompilieren von Mono-Quelle (die Allgemeine Anleitung gibt es hier):
Natürlich kann man "cross-compile": ich habe gebaut Mono auf Ubuntu-Server und verwendet die dll in Windows .Net-Projekt.
Dann stellen Sie sicher, haben die native Sqlite-Bibliothek (sqlite3.dll für Windows und sqlite3.also für Linux) in Ihrem library-Pfad ein: für Windows habe ich einfach kopiert sqlite3.dll neben dem Mono.Data.Sqlite.dll Montage, für Linux sollte es funktionieren out of the box.
Projekt sollte dann nahtlos in Windows/.Net und Linux/Mono-Umgebungen.
Können Sie lösen die Benennung Unterschiede, die mit alias
Mit unterschiedlichen Baugruppen für verschiedene builds ist eine komplexere Aufgabe, denke ich.. können Sie einen Blick auf das MSBuild-Dokumentation
Es ist ein vollständig verwalteter SQLite übersetzung. Wenn Sie das haben, dann könnten Sie die gleiche DLL Mono-und Windows.
Anderen Weg, um Ihr Problem zu lösen ist, um erstellen Sie Ihr eigenes Datenbank-interface und implementieren diese Schnittstelle einmal für Mono und eine für Microsoft .NETTO in separate DLLs. (Grundsätzlich auf die gleiche Weise erstellen Sie code, der ausgeführt wird, gegen verschiedene Datenbanken)
Können Sie einfach die mono-Implementierung von SQLite für beide, Windows-und Linux-Versionen Ihrer software. Nur sind die mono-Montage für SQLite in Ihrem software-Paket und finden Sie es lokal.
Wie Sie Lesen können, hier im letzten post, die Sie verwenden können, die es geschafft Weg von mono, die ausschließlich in Ihrem code und müssen nur zum verteilen der native Teil für windows anders. Aber Sie nicht zu verwirren haben mit verwalteten Implementierungen und redundand code durch.
Dem open-source - Vici CoolStorage ORM-Bibliothek funktioniert auf Windows (.NET), Mono (Mac,Linux und Windows) und MonoTouch (iPhone) mit dieser Plattform SQLite-Treiber.
Verwenden Sie es auf diesen verschiedenen Plattformen, die Sie nicht haben, etwas zu ändern, um Ihren source-code. Nur neu kompilieren, und es sollte funktionieren.
IMO sollten Sie zuerst versuchen zu finden eine Implementierung, funktioniert mit Windows und Linux. Wenn das nicht funktioniert, erstellen Sie eine assembly, definiert eine gemeinsame Schnittstelle für SQLite und alle Sie "#wenn LINUX" - code in der assembly. Verwenden Sie dann die assembly in der Anwendung zu vermeiden, überladen Sie die Haupt-app mit allen die # definiert.
Den SQLite ADO.NET Anbieter ist eigentlich ein mixed-mode-Montage, enthält die native SQLite-Bibliothek. Diese native Bibliothek ist nicht die gleiche auf Windows und Linux natürlich, so dass diese Anbieter nicht auf Linux zu arbeiten. Es gibt jedoch eine verwaltete version, die der provider (SQLite-1.0.65.0-managedonly-binaries.zip auf der download-Seite). Also ich denke Sie müssen nur mit dieser version des providers, und den entsprechenden nativen SQLite dynamische Bibliothek zusammen mit ihm (.dll unter Windows, .also auf Linux)
Einige Antworten vorschlagen, die vollständig verwaltet C# - port von SQLite3. Aber leider kein release-Datum unterstützt Linux oder Mac OS X trotz kompilierbare mit der Mono C# - compiler.
Einer zukünftigen Version wird ordnungsgemäß ausgeführt, auf jene nicht-Windows-Plattformen mit der Mono-runtime. Mit einigen vorbehalten, die Quell-repository enthält code, der funktioniert.
Having said that, die System.Daten.SQLite Umsetzung von sqlite.org funktioniert mit beiden .Net und Mono unter Windows und nicht-Windows-Plattformen. Sie müssen nur sicherstellen, dass die app.config verwendet, durch die Mono-runtime-maps (C++) SQLite3-dll, die entsprechende .so oder so .dylib Bibliothek. Wenn Sie die Option "mixed-mode" - version, dann sollte es nur Arbeit und Sie brauchen nicht zu sorgen über separate dlls.