2010-03-08 7 views
16

Puede alguien ayuda/me guía con el uso lib SQLite en Linux (MONO) y Windows (.NET)SQLite Aplicaciones C# en plataformas cruzadas

En Linux Yo uso nativas cliente mono SQLite, y en las ventanas yo uso http://sqlite.phxsoftware.com/

hay una manera de definir 'utilizar' las directivas de esta manera:

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

Otro problema es differencies pequeños en ambas implementaciones, como:

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

la espera de cualquier ayuda

Si conoces manera mejor o más simple de hacer esto que va muy thankfull para obtener información.

Gracias

+1

¿Por qué usaría 2 ensamblajes diferentes para realizar lo mismo? – balexandre

+1

no hay Mono.Data.Sqlite en .net, así que tuve que hacerlo. phxsoftware.com de alguna manera no quería cargar bajo Linux. – alienn

Respuesta

1

Hay un administrado totalmente SQLite translation. Si usa eso, entonces podría usar la misma DLL en Mono y Windows.

Otra forma de resolver su problema es crear su propia interfaz de base de datos y luego implementar esa interfaz una vez para Mono y otra para Microsoft .NET en DLL separadas. (Básicamente de la misma manera a crear un código que se ejecuta contra diferentes bases de datos)

+1

está basado en SQLite 3.4.0, que está desactualizado y la base de datos sufrirá problemas de incompatibilidad supongo – alienn

2

Puede resolver las diferencias de nombres a través de alias

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

Utilizando diferentes montajes para diferentes formaciones es una tarea más compleja creo que pueda .. Eche un vistazo a la documentación de MSBuild

+0

¿Qué ocurre si la implementación interna (método y propiedades) de SqliteCommand y SQLite son diferentes? – A9S6

+0

Tiene razón, asumí que todas las 2 implementaciones heredan de System.Data.SqlClient.SqlCommand – munissor

0

La biblioteca ORM de código abierto Vici CoolStorage funciona en Windows (.NET), Mono (Mac, Linux y Windows) y MonoTouch (iPhone) usando el controlador SQLite de esa plataforma.

Para utilizarlo en estas plataformas diferentes, no tiene que cambiar nada a su código fuente. Solo recompile, y debería funcionar.

0

IMO primero debe intentar encontrar una implementación que funcione tanto en Windows como en Linux. Si eso no funciona, cree un ensamblado que defina una interfaz común para SQLite y coloque todo el código "#if LINUX" en ese ensamblaje. A continuación, utilice ese ensamblaje en la aplicación principal para evitar saturar la aplicación principal con todos los # define.

0

El proveedor SQLite ADO.NET es en realidad un conjunto de modo mixto, que contiene la biblioteca SQLite nativa. Esta biblioteca nativa no es lo mismo en Windows y Linux, por supuesto, por lo que este proveedor no funciona en Linux. Sin embargo, hay una versión solo administrada del proveedor (SQLite-1.0.65.0-managedonly-binaries.zip en la página de descarga). Entonces piensa solo necesita usar esta versión del proveedor, y proporcione la biblioteca dinámica SQLite nativa adecuada junto con ella (.dll en Windows, .so en Linux)

1

Puede simplemente usar la implementación mono de SQLite para ambas versiones, Windows y Linux de su software. Simplemente incluya el ensamblaje mono para SQLite en su paquete de software y consúltelo localmente.

Como puede leer here en la última publicación, puede usar la forma administrada de mono únicamente en su código y solo necesita redistribuir la parte nativa para windows de manera diferente.Pero no tiene que meterse con las implementaciones administradas y el código de redundancia a través de eso.

+0

, por lo tanto, necesito proporcionar e incluir mono sqlite .so en Windows build? – alienn

+0

bueno, tengo que admitirlo, no parece tan simple. –

4

Puede usar csharp-sqlite que es un puerto a C# de Sql-Lite. Es muy activo y se basa en la versión 3.6.22 de SqlLite. Vea el comments de Miguel en intentos de tratar de acelerarlo.

+0

+1, solo quería agregar que hasta el momento el proyecto parece estar activo y se mantienen actualizados con las versiones de SQLite. – torial

+0

Desafortunadamente, la versión actual (desde agosto de 2011) es para SQLite 3.7.7.1, mientras que la versión actual de SQLite es 3.8.4.3. –

0

Algunas respuestas sugieren C# port of SQLite3 totalmente administrado. Pero, desafortunadamente, ningún lanzamiento hasta la fecha admite Linux o Mac OS X a pesar de ser compilable con el compilador Mono C#.

Una versión futura se ejecutará correctamente en aquellas plataformas que no sean de Windows con el tiempo de ejecución Mono. Con algunas advertencias, el source repository contiene código que funciona.

Dicho esto, la implementación System.Data.SQLite disponible desde sqlite.org funciona tanto con .Net como con Mono, en plataformas Windows y no Windows. Solo necesita asegurarse de que la aplicación.config utilizada por Mono en tiempo de ejecución correlacione el dll SQLite3 (C++) con la biblioteca .so o .dylib apropiada. Si elige la versión de "modo mixto", entonces debería solo funcionar y no tiene que preocuparse por dlls por separado.

+0

¿Cómo se hace que System.Data.SQLite funcione con Mono? No es tan simple como describes desafortunadamente. –

4

Recientemente me he encontrado con el problema: crear una aplicación que use Sqlite en Windows con Visual Studio y desplegarla en un cuadro de Ubuntu Server para producción.

La solución más simple que he encontrado es usar el controlador Mono para Sqlite: Mono.Data.Sqlite.

Las cosas podrían haber sido un poco más simple, pero no es a bug with .Net 4.0 que aún no se empaqueta en el funcionario Mono libera.

Por lo que usted tiene que compilar Mono de la fuente (the general instructions are here):

  • primera compilar toda la materia Mono
  • que no es necesario que lo instale si quiere mantener su configuración actual Mono
  • copiar el biblioteca Mono.Data.Sqlite.dll

por supuesto que puedes "compilación cruzada": he construido Mono en Ubuntu se rver y usó el dll en un proyecto .Net de Windows.

A continuación, asegúrese de que tiene the native Sqlite library (sqlite3.dll para Windows y sqlite3.so para Linux) en su ruta de bibliotecas: para Windows simplemente copió la sqlite3.dll junto a la asamblea Mono.Data.Sqlite.dll, para Linux debería funcionar de la caja.

El proyecto debe funcionar sin problemas en entornos Windows/.Net y Linux/Mono.

Cuestiones relacionadas