Linux 部署ASP.NET SQLite 應用 的坎坷之旅 附demo及原始碼
Linux 部署ASP.NET SQLite 應用 的坎坷之旅。文章底部 附示例程式碼。
有一臺閒置的Linux VPS,嘗試著部署一下.NET 程式,結果就踏上了坑之路,不過最後算是完美解決問題,遂記錄如下。
環境:Linux系統為centos 6 mono 版本 mono-3.2.1 jexus版本 jexus-5.6.4
一.安裝環境
1.安裝mono
首先安裝系統環境:
yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel libtiff-devel libexif-devel giflib-devel libX11-devel freetype-devel fontconfig-devel cairo-devel
下載mono 安裝:
wget http://download.mono-project.com/sources/mono/mono-3.2.1.tar.bz2 tar -jxvf mono-3.2.1.tar.bz2 cd mono-3.2.1 ./configure –prefix=/usr make 此時出現以下錯誤 ../src/.libs/libeglib.a(libeglib_la-gunicode.o): In function `monoeg_g_get_charset’: /root/mono-3.2.1/eglib/src/gunicode.c:223: undefined reference to `locale_charset’ collect2: ld returned 1 exit status make[4]: *** [test-eglib] Error 1 make[4]: Leaving directory `/root/mono-3.2.1/eglib/test’ make[3]: *** [all-recursive] Error 1 make[3]: Leaving directory `/root/mono-3.2.1/eglib’ make[2]: *** [all] Error 2 make[2]: Leaving directory `/root/mono-3.2.1/eglib’ make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/mono-3.2.1′ make: *** [all] Error 2 修改 eglib/config.h vi eglib/config.h 將#define HAVE_LOCALCHARSET_H 1 替換為 #define HAVE_LOCALCHARSET_H 0 make make install mono –V 這一步顯示資訊代表安裝成功
2.安裝jexus
cd /tmp wget linuxdot.net/down/jexus-5.6.4.tar.gz tar -zxvf jexus-5.6.4.tar.gz cd jexus-5.6.4 sudo ./install
jexus 相關配置說明:http://www.linuxdot.net/bbsfile-3084
二.程式碼部分
有兩種方式可以在Linux上使asp.net 操作sqlite。
由於Linux自帶sqlite 環境,所以無需安裝環境。而Windows沒有需要安裝sqlite,或者下載sqlite3.dll。
本文示例採用WebForm 開發。
1.使用Mono自帶的 Mono.Data.Sqlite
使用方法和Ado.Net 相同。這裡就不做過多講解。
主要在連結字串部分 "Version=3;Data Source={檔案路徑}"
2.使用NuGet中的sqlite-net (最終採用的方法,比較完美)
Install-Package sqlite-net
github: https://github.com/praeclarum/sqlite-net
wiki: https://github.com/praeclarum/sqlite-net/wiki
安裝好後就可以開發。wiki 裡面講解了一些詳細的用法。
我只是實現一些簡單的增刪查改操作。
使用方法:
[PrimaryKey, AutoIncrement] //主鍵加自增 public int ID { get; set; }
更多方法參見wiki
基本的一些程式碼
public partial class Demo : System.Web.UI.Page { private SQLiteConnection con = null; protected void Page_Load(object sender, EventArgs e) { var path = Server.MapPath("~/App_Data/Demo.db"); con = new SQLiteConnection(path); //con.CreateTable<User>();//建立表 只需執行一次 if (!string.IsNullOrEmpty(Request["id"])) { con.Delete<User>(Request["id"]); Response.Redirect("Demo.aspx"); } var cmd = con.CreateCommand("select * from User"); var list = cmd.ExecuteQuery<User>(); foreach (var item in list) { Response.Write(string.Format("{0}-{1}-{2} <a href='Demo.aspx?id={3}'>刪除</a><br>", item.Name,item.PassWord,item.CreateTime,item.ID)); } } protected void BtnAdd_Click(object sender, EventArgs e) { var rand = new Random().Next(100, 999); User user = new User(); user.Name = "ceshi"+rand; user.PassWord = "123456"+rand; user.CreateTime = DateTime.Now; con.Insert(user);//新增資料 Response.Redirect("Demo.aspx"); } }
最終釋出的程式採用winscp上傳到vps中的。完美在linux上執行。
執行截圖:
上面的系統標識為linux。
三.總結
asp.net mvc 5.0版本及以上在linux mono 環境下支援不是特別好。
感謝@張善友 提醒: Windows不區分大小寫,Linux嚴格區分大小寫。所以路徑須保持大小寫一致。
最後感謝網路上的各位前輩的無私分享。特別感謝 園子@張善友的分享。
參考連結: http://www.cnblogs.com/shanyou/p/3322811.html
http://www.jexus.org/
http://www.linuxdot.net/
如果你覺得本文對你有幫助,請點選“推薦”,謝謝。