SQLite на C # Кроссплатформенные приложения - PullRequest
16 голосов
/ 08 марта 2010

Может ли кто-нибудь помочь мне / помочь с использованием SQLite lib в Linux (MONO) и Windows (.NET)

В Linux я использую нативный клиент sqlite, а в Windows - http://sqlite.phxsoftware.com/

есть ли способ определить директивы using следующим образом:

#if (linux)
  using Mono.Data.Sqlite;
#else
  using System.Data.SQLite;

Другая проблема - небольшие различия в обеих реализациях, такие как:

cmd = new SqliteCommand(); // mono
cmd = new SQLiteCommand(); // sqlite.phxsoftware.com

В ожидании любой помощи

Если вы знаете лучше или более простой способ сделать это, он будет очень благодарен за информацию.

Спасибо

Ответы [ 9 ]

4 голосов
/ 09 марта 2010

Вы можете использовать csharp-sqlite , который является портом для C # Sql-Lite. Он очень активен и основан на версии 3.6.22 SqlLite. См. комментарии Мигеля о попытках ускорить его.

4 голосов
/ 15 января 2014

Недавно я тоже сталкивался с этой проблемой: создание приложения, использующего Sqlite в Windows, с Visual Studio и развертывание его на сервере Ubuntu Server для производства.

Самое простое решение, которое я нашел, это использование драйвера Mono для Sqlite: Mono.Data.Sqlite .

Все могло бы быть немного проще, но есть ошибка с .Net 4.0 , которая еще не включена в официальные релизы Mono.

Так что вам придется скомпилировать Mono из исходного кода ( общие инструкции здесь ):

  • сначала скомпилируйте весь Mono
  • вам не нужно устанавливать его, если вы хотите сохранить текущие настройки Mono
  • скопировать Mono.Data.Sqlite.dll библиотека

Конечно, вы можете «кросс-компилировать»: я собрал Mono на Ubuntu Server и использовал dll в проекте Windows .Net.

Затем убедитесь, что у вас есть собственная библиотека Sqlite (sqlite3.dll для Windows и sqlite3.so для Linux) в пути к вашей библиотеке: для Windows я просто скопировал sqlite3.dll рядом со сборкой Mono.Data.Sqlite.dll, для Linux она должна работать "из коробки".

Ваш проект должен работать без проблем в средах Windows / .Net и Linux / Mono.

2 голосов
/ 08 марта 2010

Вы можете устранить различия в именах, используя псевдоним

#if (linux)
  using SqlCommand = Mono.Data.Sqlite.SqliteCommand;
#else
  using SqlCommand = System.Data.SQLite;

Использование разных сборок для разных сборок - более сложная задача, я думаю ... вы можете взглянуть на документацию MSBuild

1 голос
/ 08 марта 2010

Вы можете просто использовать моно реализацию SQLite для версий вашего программного обеспечения как для Windows, так и для Linux. Просто включите моно-сборку для SQLite в ваш программный пакет и обращайтесь к ней локально.

Как вы можете прочитать здесь в последнем посте, вы можете использовать управляемый способ моно исключительно в своем коде, и вам просто нужно по-другому распространять нативную часть для окон. Но вам не нужно связываться с управляемыми реализациями и дублировать и кодировать через это.

1 голос
/ 08 марта 2010

Существует полностью управляемый перевод SQLite . Если вы используете это, то вы можете использовать одну и ту же DLL на Mono и Windows.

Еще один способ решить вашу проблему - создать собственный интерфейс базы данных, а затем реализовать этот интерфейс один раз для Mono и один для Microsoft .NET в отдельных DLL. (В основном так же, как вы создаете код для разных баз данных)

0 голосов
/ 22 августа 2012

В некоторых ответах предлагается полностью управляемый C # порт SQLite3 . Но, к сожалению, ни один выпуск на сегодняшний день не поддерживает Linux или Mac OS X, несмотря на то, что он компилируется с компилятором Mono C #.

Будущий выпуск будет корректно работать на платформах, отличных от Windows, с Mono Runtime. С некоторыми оговорками, исходный репозиторий содержит работающий код.

Сказав это, реализация System.Data.SQLite , доступная с sqlite.org, работает как с .Net, так и с Mono на платформах Windows и не Windows. Вам просто нужно убедиться, что app.config, используемый Mono во время выполнения, отображает (C ++) SQLite3 dll в соответствующую библиотеку .so или .dylib. Если вы выбираете версию «смешанного режима», то она должна просто работать , и вам не нужно беспокоиться об отдельных библиотеках.

0 голосов
/ 08 марта 2010

Поставщик SQLite ADO.NET на самом деле представляет собой сборку смешанного режима, которая содержит собственную библиотеку SQLite. Конечно, эта нативная библиотека не одинакова в Windows и Linux, поэтому этот провайдер не работает в Linux. Однако существует версия поставщика, предназначенная только для управления ( SQLite-1.0.65.0-managedonly-binaries.zip на странице загрузки). Поэтому я думаю , что вам просто нужно использовать эту версию провайдера и предоставить соответствующую динамическую библиотеку SQLite вместе с ней (.dll в Windows, .so в Linux)

0 голосов
/ 08 марта 2010

IMO, вы должны сначала попытаться найти реализацию, которая работает как в Windows, так и в Linux. Если это не сработает, создайте сборку, которая определяет общий интерфейс для SQLite, и поместите весь код "#if LINUX" в эту сборку. Затем используйте эту сборку в основном приложении, чтобы не загромождать главное приложение всеми # определениями.

0 голосов
/ 08 марта 2010

Библиотека с открытым исходным кодом Vici CoolStorage Библиотека ORM работает в Windows (.NET), Mono (Mac, Linux и Windows) и MonoTouch (iPhone) с использованием драйвера SQLite этой платформы.

Чтобы использовать его на этих разных платформах, вам не нужно ничего менять в своем исходном коде. Просто перекомпилируйте, и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...