[Mono-list] Using System.Data.SQLite from both windows and linux

Jonathan Pryor jonpryor at vt.edu
Tue Jan 19 13:53:08 EST 2010

On Mon, 2010-01-18 at 13:46 -0600, Dan Winslow wrote:
> I am trying to write a single source that can run on both windows and
> linux, and that uses Sqlite as its data storage. I am using the
> current mono build ( I built from latest tarball ).

>      1. I downloaded and installed the System.Data.SQLite ado provider
>         from phxsoftware.

There are two providers, the "managedonly" provider and the "normal"

YOU CANNOT USE THE NORMAL PROVIDER ON Mono/Linux, and I see from your
message that you're attempting to do so.

The reason being that the normal provider is a mixed-mode assembly,
bundling the native SQLite DLL with the managed ADO.NET wrapper in one
assembly.  Mono does not support these; see:


There are two solutions to using SQLite portably between Linux &

1. Use the managedonly System.Data.SQLite provider.  You will then need 
   to distribute the SQLITE3.DLL native library with your app.

2. Use Mono.Data.Sqlite.  This is basically the managedonly 
   System.Data.SQLite provider with a different namespace and 
   capitalization scheme.  The advantage is that, on Linux, the assembly
   and native library are handled by the Linux distro (and thus don't
   need to be bundled with your app), but on .NET you'll need to 
   distribute both Mono.Data.Sqlite.dll and sqlite3.dll with your app
   (which is the same as with managedonly System.Data.SQLite).

 - Jon

More information about the Mono-list mailing list