在Linux Mint13下编译安装mono运行时
最近一直想体验下mono在web开发上到底进展到什么程度,挑战一下它对web开发的极限。因为asp.net mvc本身依赖windows平台的东西不太多,所以这些assembly移植到mono/linux上来应该不是大问题。网上很多人很早也介绍了相关主题,但是他们大部分是基于这样的模式:在Visual Studio里开发asp.net mvc网站,然后再部署到linux上。我个人觉得这种做法只能验证mono运行时有支持asp.net mvc的能力,这个确实也在mono 2.10的release note里提到了。但是如果想要在linux上开发asp.net mvc网站怎么办呢?有同学会说:那在linux上装个虚拟机做开发吧~~
本文我将会介绍怎样在linux上用用monodevelop开发一个简单的asp.net mvc3网站。asp.net mvc3是mono运行时目前支持的最新的版本,这个版本相对2比较成熟点 。然后会介绍我在这个过程中碰到的一些问题以及解决办法。从下面这个截图,我们可以知道请求是从ubuntu Chromium/28.0.1500.52上发出的,我本机是linux mint,属于ubuntu系的,再查看response,可以知道asp.net版本是4.0.30319,mvc版本是3.0,我用的开发服务器是Mono.WebServer.XSP/3.0.0.0。
既然我们的目的是带有探索性的,那么我采用的是最近的源码,从github上我获取了3个项目:mono,monodevelop,xsp。第一个是mono运行时,第二个是IDE,第三个是开发版Web服务器。我会把所有的这些项目都安装到/usr/local目录下,以免跟从软件源里安装的版本冲突,另外,因为毕竟是不稳定版本,如果贸然装到/usr下的话,系统也不稳定。首先编译mono运行时,这个可以参考我以前的一篇文章在Linux Mint13下编译安装mono运行时。接下来就是编译IDE,不出意外您也应该跟我一样碰到一些编译错误,主要是由于引用的DLL找不到引起的。很多依赖的csharp binding assembly找不到,例如,glib-sharp,gtk-sharp等,解决方法就是把这些assembly的pc文件从/usr/lib/pkgconfig下拷贝到/usr/local/lib/pkgconfig。下面看看gtk-sharp-2.0的pc文件的一部分,我们看它的第一行prefix是一个相对值,在拷贝到/usr/local/lib/pkgconfig之后,gtk-sharp.dll在/usr/local下仍然找不到,因此需要把它变成一个绝对路径prefix=/usr。
然后我把我这边/usr/local/lib/pkgconfig目录下所有的pc文件截个图出来
等build通过后,在monodevelop目录下运行make run,这样就启动IDE了。
我用gtksharp拖出了个简单的界面,编译,运行,调试,都可以的。神器阿~~~~
接下来再编译xsp的源码。我本打算用源里的那个xsp,但是编译出来的IDE总是报找不到xsp,这个我就没有深究,因为可以yy的原因实在太多,不想浪费时间调查这个。所以就决定自己编译xsp。没想到编译相当顺利并且快(1分钟左右在我机器上),出乎意料。xsp源码里自带了一个测试用的asp.net网站,然后我切换到目录/usr/local/lib/xsp/test目录下运行xsp4,服务器在端口9000上起来了。
在浏览器中输入localhost:9000,很cool,asp.net网站在linux上运行了。但是有些asp.net web控件显示错误,例如menu,grid。因为这些控件的实现依赖gdi+,所以我从源里安装libgdiplus,也需要把它的pc文件拷贝到/usr/local/lib/pkgconfig下。这样,整个test网站显示都没问题了。
接下来在IDE中建asp.net mvc项目,简单起见,先从v2开始。这个过程没啥问题,xsp正常启动,网站能够浏览,目前能调试时动态修改代码但不能立即生效,问题不大。然后做v3,问题来了。第一就是项目的引用DLL System.Web.Helpers.dll和System.Web.WebPages.dll 就标红,提示找不到。System.Web.Helpers.dll确实在mono运行时里没有,然后我看了一下这个DLL的实现,认为它没啥大关系,所以就直接删掉了。System.Web.WebPages.dll在/usr/local/lib/mono/4.5下是有的,并且也在gac下注册了,并且我项目的targetFramework也是指定的4.5,它标红就有点想不通了,有知道答案的同学请通知一声。后来我也把它删掉了,但是必须把System.Web.WebPages.dll拷贝到项目的bin目录下,因为razor在解析页面的时候需要用到它,否则页面也展现不出来。这个后面会说。接下来的一个问题更头痛,xsp在mono 4.5下怎么也启动不起来。在v2时,因为目标framework默认是4,所以没问题。好在所有涉及到的代码都可以直接调试,发现xsp服务器在初始化asp.net运行时时Configuration没有重新初始化好,一读appSettings就报错。后来把target framework改成4就没问题了。终于,网站可以访问了,但是页面展现时报错,网页上的错误信息非常模糊,说Home/Index.cshtml找不到,我了个去,明明在那儿阿,挑战理解极限阿~~~继续调戏,注意是被调戏~~~原来web.config里有几个引用的assembly没找到,我删除了System.Web.Helpers.dll的引用。然后System.Web.WebPages.dll的版本不是1.0而是2.0。如果大家有什么问题欢迎交流。
在Linux Mint13下编译安装mono运行时的更多相关文章
- linux(Centos)下编译安装gcc4.8.2
欢迎转载.转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/46811159 近期要用到c++ 11,所以没办法仅仅得把那台ce ...
- Linux Centos下编译安装Redis
需要安装 tcl 8.5 wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz //直接下载 sudo tar xzvf tcl8 ...
- Linux(CentOS)下编译安装apache
Centos7.6系统 已经安装lnmp一键环境 想装个apache跑php7 (php7的安装以及与apache的交互在这里: https://www.cnblogs.com/lz0925/p/11 ...
- LINUX下编译安装PHP各种报错大集合
本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...
- linux下编译安装vim7.4并安装clang_complete插件
linux下编译安装vim7.4并安装clang_complete插件 因为debian里软件仓库中下载安装的vim是不支持python写的插件的(可以打开vim,在命令模式先输入:py测试一下),导 ...
- linux下编译安装curl
linux下编译安装curl 1.下载curl git clone https://github.com/curl/curl.git 2.在curl目录下生成configure文件 ./buldcon ...
- linux下编译安装boost库
linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...
- Linux下编译安装Apache Http Server
Linux下编译安装Apache Http Server [TOC] 1.下载httpd-2.4.12.tar.bz2 wget http://mirror.bit.edu.cn/apache/htt ...
- Linux下编译安装PCRE库
备注:如果没有root权限,使用 --prefix 指定安装路径 ./configure --prefix=/home/work/tools/pcre-8.xx =================== ...
随机推荐
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- 快速构建Windows 8风格应用12-SearchContract概述及原理
原文:快速构建Windows 8风格应用12-SearchContract概述及原理 本篇博文主要介绍Search Contract概述.Search Contract面板结构剖析.Search Co ...
- 【COCOS2DX-游戏开发之三四】cocos2dx 3.0 TableView特殊使用方法:滚动时不能选择等等
cocos2dx 3.0版本号TableView拍生自ScrollView,经常使用来做滚动列表,有几种特殊使用方法,不知道大家用到过没 要求:1.滚动时不能选中TableCell,非滚动状态才干选中 ...
- 用erlang写的kmp算法
Knuth-Morris-Pratt 字符串查找算法,简称为 "KMP算法",常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth.Vaughan ...
- VS2015 Apache Cordova
VS2015 Apache Cordova第一个Android和IOS应用 前言 本人个人博客原文链接地址为http://aehyok.com/Blog/Detail/75.html. http: ...
- SQL Mon 介绍
原文:SQL Mon 介绍 这是一个相当高级的SQL Server监控工具,全面监控SQL Server的活动与性能,分析性能瓶颈,给出优化建议. red-gate有一个在线的数据库监控工具,不过那个 ...
- python进程池剖析(一)
python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...
- 用css样式围剿等高列问题(转载)
明修栈道暗度陈仓 该秘籍的心法只有十二个字:”隐藏容器溢出,正负内外边距.”看完下面的几行代码,再看这句话你真的可以看到圣光! 隐藏容器溢出.将外层容器的溢出设为隐藏: .container { ov ...
- 【转】GIT和SVN之间的五个基本区别
如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了. GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果 ...
- c#计算2个字符串的相似度
直接来代码 public static float levenshtein(string str1, string str2) { //计算两个字符串的长度. int len1 = str1.Leng ...