Может кто-то помогать/вести мне с использованием lib SQLite на Linux (МОНО) и Windows (.NET)
На Linux я использую собственный моно sqlite клиент, и на окнах я использую http://sqlite.phxsoftware.com/
есть ли способ определить директивы 'использования' как это:
#if (linux)
using Mono.Data.Sqlite;
#else
using System.Data.SQLite;
Другой проблемой является маленький differencies на обеих реализациях, как:
cmd = new SqliteCommand(); // mono
cmd = new SQLiteCommand(); // sqlite.phxsoftware.com
Ожидание любой справки
Если Вы будете знать лучше или simplier способ сделать это, то он будет очень благодарный за информацию.
Спасибо
Существует полностью управляемая трансляция SQLite . Если вы используете это, вы можете использовать одну и ту же DLL в Mono и Windows.
Другой способ решить вашу проблему - создать собственный интерфейс базы данных, а затем реализовать этот интерфейс один раз для Mono и один для Microsoft .NET в отдельных библиотеках DLL. (Примерно так же, как вы создаете код, который работает с разными базами данных)
ORM-библиотека с открытым исходным кодом Vici CoolStorage работает на Windows (.NET), Mono (Mac, Linux и Windows) и MonoTouch (iPhone), используя драйвер SQLite этой платформы.
Чтобы использовать ее на этих разных платформах, вам не нужно ничего менять в исходном коде. Просто перекомпилируйте, и все должно работать.
IMO вам следует сначала попытаться найти реализацию, которая работает и в Windows, и в Linux. Если это не сработает, создайте сборку, определяющую общий интерфейс для SQLite, и поместите весь ваш код "#if LINUX" в эту сборку. Затем используйте эту сборку в основном приложении, чтобы не загромождать основное приложение всеми #определениями.
Поставщик SQLite ADO.NET на самом деле представляет собой сборку смешанного режима, которая содержит собственную библиотеку SQLite. Эта собственная библиотека, конечно же, отличается от Windows и Linux, поэтому этот поставщик не работает в Linux. Однако существует управляемая версия поставщика ( SQLite-1.0.65.0-managedonly-binaries.zip на странице загрузки). Поэтому я думаю , что вам просто нужно использовать эту версию провайдера и предоставить вместе с ней соответствующую родную динамическую библиотеку SQLite (.dll в Windows, .so в Linux)
Вы можете решить разницу в именовании с помощью alias
#if (linux)
using SqlCommand = Mono.Data.Sqlite.SqliteCommand;
#else
using SqlCommand = System.Data.SQLite;
Использование разных сборок для разных сборок - более сложная задача, я думаю... вы можете посмотреть документацию MSBuild
Вы можете просто использовать монореализацию SQLite как для Windows, так и для Linux версии вашего программного обеспечения. Просто включите сборку mono для SQLite в пакет вашего программного обеспечения и обращайтесь к ней локально.
Как вы можете прочитать здесь в последнем посте, вы можете использовать управляемый способ mono исключительно в вашем коде и вам нужно просто перераспределить родную часть для windows по-другому. Но вам не придется возиться с управляемыми реализациями и избыточным кодом через это.
Вы можете использовать csharp-sqlite , который является портом Sql-Lite на C #. Он очень активен и основан на версии SqlLite 3.6.22. См. Комментарии Мигеля о попытках ускорить это.