Подтвердить что ты не робот

SQLite на кроссплатформенных приложениях С#

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

В linux я использую собственный клиент mono sqlite, а на окнах я использую 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

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

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

Спасибо

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Итак, вам нужно будет скомпилировать Mono из источника (общие инструкции здесь):

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

Конечно, вы можете "перекрестно скомпилировать": я построил Mono на сервере Ubuntu и использовал DLL в проекте Windows.Net.

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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