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 /tmpwget 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严格区分大小写。所以路径须保持大小写一致。
最后感谢网络上的各位前辈的无私分享。特别感谢 园子@张善友的分享。
源码地址:https://github.com/linezero/sqlitedemo
参考链接: http://www.cnblogs.com/shanyou/p/3322811.html
http://www.jexus.org/
http://www.linuxdot.net/
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android截图事件监听的原理与实现
- 我常用的一些linux命令小结
- linux下安装mongodb教程
- Android中使用TagFlowLayout制作动态添加删除标签
- Android时间对话框使用方法详解
- Ubuntu基础设定:openssh-server的安装和使用介绍
- Android ProgressDialog的实例详解
- linux下获取文件的创建时间与实战教程
- Android 判断网络状态及开启网路
- Android判断后台服务是否开启的两种方法实例详解
- 在CentOS7上搭建Jenkins+Maven+Git持续集成环境的方法
- Linux 实现定时文件占用磁盘空间大小操作方法
- Android开发之文件操作详解
- Linux查看服务器硬件信息的方法步骤
- Android实现EditText的富文本编辑