有人可以帮助/指导我在Linux(MONO)和Windows(.NET)上使用SQLite lib
在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
等待任何帮助
如果您知道更好或更简单的方法,那么非常感谢您提供信息。
由于
答案 0 :(得分:4)
您可以使用csharp-sqlite这是Sql-Lite的C#的端口。它非常活跃,基于3.6.22版本的SqlLite。有关试图加快速度的尝试,请参阅Miguel的comments。
答案 1 :(得分:4)
我最近也遇到过这个问题:构建一个在Windows上使用Sqlite和Visual Studio的应用程序,并将其部署在Ubuntu服务器盒上进行生产。
我发现最简单的解决方案是使用Schoite的Mono驱动程序: Mono.Data.Sqlite 。
事情本来可以更简单,但 a bug with .Net 4.0 还没有打包在官方的Mono版本中。
所以你必须从源代码(the general instructions are here)编译Mono:
当然你可以“交叉编译”:我在Ubuntu服务器上构建了Mono,并在Windows .Net项目中使用了dll。
然后确保您的库路径中有 the native Sqlite library (适用于Windows的sqlite3.dll和适用于Linux的sqlite3.so):对于Windows,我只是复制了Mono旁边的sqlite3.dll .Data.Sqlite.dll程序集,对于Linux,它应该开箱即用。
您的项目应该可以在Windows / .Net和Linux / Mono环境中无缝工作。
答案 2 :(得分:2)
您可以使用别名
解决命名差异#if (linux)
using SqlCommand = Mono.Data.Sqlite.SqliteCommand;
#else
using SqlCommand = System.Data.SQLite;
对于不同的构建使用不同的程序集是一个更复杂的任务我认为..您可以查看MSBuild文档
答案 3 :(得分:1)
有一个完全托管的SQLite translation。如果你使用它,那么你可以在Mono和Windows上使用相同的DLL。
解决问题的另一种方法是创建自己的数据库接口,然后为Mono实现一次该接口,在单独的DLL中为Microsoft .NET实现一次。 (基本上与创建针对不同数据库运行的代码的方式相同)
答案 4 :(得分:1)
您可以在软件的Windows和Linux版本中使用SQLite的单声道实现。只需在软件包中包含SQLite的mono程序集并在本地引用它即可。
正如您在上一篇文章中可以阅读here一样,您可以在代码中使用单独管理的mono方式,只需要以不同方式重新分配Windows的本机部分。但是,您不必通过它来处理托管实现和冗余代码。
答案 5 :(得分:0)
开源Vici CoolStorage ORM库使用该平台的SQLite驱动程序在Windows(.NET),Mono(Mac,Linux和Windows)和MonoTouch(iPhone)上运行。
要在这些不同的平台上使用它,您不必更改源代码的任何内容。只需重新编译,它应该可以工作。
答案 6 :(得分:0)
IMO你应该首先尝试找到适用于Windows和Linux的实现。如果这不起作用,请创建一个程序集,为SQLite定义一个公共接口,并将所有“#if LINUX”代码放在该程序集中。然后在主应用程序中使用该程序集,以避免使用所有#define将主应用程序混乱。
答案 7 :(得分:0)
SQLite ADO.NET提供程序实际上是一个混合模式程序集,其中包含本机SQLite库。当然,这个本机库在Windows和Linux上并不相同,因此这个提供程序在Linux上不起作用。但是,在下载页面上有一个托管版本的提供程序( SQLite-1.0.65.0-managedonly-binaries.zip )。所以我想你只需要使用这个版本的提供程序,并提供足够的原生SQLite动态库(Windows上的.dll,Linux上的.so)
答案 8 :(得分:0)
有些答案表明完全管理C# port of SQLite3。但遗憾的是,尽管可以与Mono C#编译器进行编译,但迄今为止还没有发布支持Linux或Mac OS X.
将来的版本将在具有Mono运行时的非Windows平台上正确运行。有一些警告,source repository包含有效的代码。
话虽如此,sqlite.org提供的System.Data.SQLite实现适用于Windows和非Windows平台上的.Net和Mono。您只需要确保Mono在运行时使用的app.config将(C ++)SQLite3 dll映射到相应的.so或.dylib库。如果您选择“混合模式”版本,那么它应该正常工作并且您不必担心单独的dll。