最近一直想体验下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运行时的更多相关文章

  1. linux(Centos)下编译安装gcc4.8.2

    欢迎转载.转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/46811159 近期要用到c++ 11,所以没办法仅仅得把那台ce ...

  2. Linux Centos下编译安装Redis

    需要安装 tcl 8.5 wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz //直接下载 sudo tar xzvf tcl8 ...

  3. Linux(CentOS)下编译安装apache

    Centos7.6系统 已经安装lnmp一键环境 想装个apache跑php7 (php7的安装以及与apache的交互在这里: https://www.cnblogs.com/lz0925/p/11 ...

  4. LINUX下编译安装PHP各种报错大集合

    本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...

  5. linux下编译安装vim7.4并安装clang_complete插件

    linux下编译安装vim7.4并安装clang_complete插件 因为debian里软件仓库中下载安装的vim是不支持python写的插件的(可以打开vim,在命令模式先输入:py测试一下),导 ...

  6. linux下编译安装curl

    linux下编译安装curl 1.下载curl git clone https://github.com/curl/curl.git 2.在curl目录下生成configure文件 ./buldcon ...

  7. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

  8. Linux下编译安装Apache Http Server

    Linux下编译安装Apache Http Server [TOC] 1.下载httpd-2.4.12.tar.bz2 wget http://mirror.bit.edu.cn/apache/htt ...

  9. Linux下编译安装PCRE库

    备注:如果没有root权限,使用 --prefix 指定安装路径 ./configure --prefix=/home/work/tools/pcre-8.xx =================== ...

随机推荐

  1. java设计模式之八代理模式(Proxy)

    其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你 ...

  2. ShellExecute函数简单说明

    平时在delphi写代码的过程中总是能遇到ShellExecute函数,于是索性将它的使用方法整理一下,由于我在微软的站点上也没能查到个详解(当然我查的中文版,俺菜嘛) ShellExecute函数原 ...

  3. TDD(测试驱动开发)

    TDD(测试驱动开发)培训录 2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都 ...

  4. Android slidingmenu详细解释 滑动的优化

    Android slidingmenu 详细解释 性能优化 转载请注明:   http://blog.csdn.net/aaawqqq 简单介绍 SlidingMenu 是github 上Androi ...

  5. Wijmo 5 + Ionic Framework之:费用跟踪 App

    Wijmo 5 + Ionic Framework之:费用跟踪 App 费用跟踪应用采用了Wijmo5和Ionic Framework创建,目的是构建一个hybird app. 我们基于<Mob ...

  6. firefox os 该设备呼叫移动开发

    1)话筒 权限:telephony api:navigator.moztelephony 参考链接:https://wiki.mozilla.org/WebAPI/WebTelephony 2) 扬声 ...

  7. c#编写的基于Socket的异步通信系统

    c#编写的基于Socket的异步通信系统 SanNiuSignal是一个基于异步socket的完全免费DLL:它里面封装了Client,Server以及UDP:有了这个DLL:用户不用去关心心跳:粘包 ...

  8. Linq无聊练习系列6--Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习

    /*********************Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习******* ...

  9. iOS基础 - 控制器

    一.当两个控制器互为父子关系的时候,它们的view一般也是互为父子关系 比如想添加A控制器的view到B控制器的view上,就应该让A控制器成为B控制器的子控制器,而B控制器就称为A控制器的父控制器 ...

  10. 在线压缩JS的工具

    给大家介绍款在线压缩JS的工具 首先说下该工具的域名:http://javascriptcompressor.com/ 进入后界面如下: 具体要讲下它的功能点:在线压缩 Javascript 源码可以 ...