最近一直想体验下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. POJ1320 Street Numbers【佩尔方程】

    主题链接: http://poj.org/problem?id=1320 题目大意: 求解两个不相等的正整数N.M(N<M),使得 1 + 2 + - + N = (N+1) + - + M.输 ...

  2. ubuntu安装nVidia驱动,遇到终端闪砾问题并解决

    安装nvidia的官方驱动之后,比起nouvean来说感觉速度快了不少. 安装该驱动很简单,但选择哪个驱动是要注意的.因为今天我试了nvidia的多个驱动后都在ubuntu下用起来并不好. 我现在的环 ...

  3. 探秘IntelliJ IDEA 13测试版新功能——调试器显示本地变量

    IntelliJ IDEA在业界被公认为最好的Java开发平台之一,JetBrains公司将在12月正式发布IntelliJ IDEA 13版本. 现在,小编将和大家一起探秘密IntelliJ IDE ...

  4. C++中的左值和右值

    左值和右值的定义 在C++中,能够放到赋值操作符=左边的是左值,能够放到赋值操作符右边的是右值.有些变量既能够当左值又能够当右值.进一步来讲,左值为Lvalue,事实上L代表Location,表示在内 ...

  5. 使用Windows2003创建DHCP服务器 - 进阶者系列 - 学习者系列文章

    Windows 2003提供的DHCP服务还是挺强大的.下面大概介绍下DHCP服务器的配置. 1.  通过控制面板安装DHCP服务 2.  打开DHCP配置项 3.  选择 新建作用域 4.  输入名 ...

  6. ventBroker简单实现

    C#编程实践—EventBroker简单实现 前言 话说EventBroker这玩意已经不是什么新鲜货了,记得第一次接触这玩意是在进第二家公司的时候,公司产品基础架构层中集成了分布式消息中间件,在.n ...

  7. 查询select

    --------------select查询-------------------查询所有信息(方法一)select * from stuinfo --*号代表所有列--查询所有信息(方法二)sele ...

  8. Scala + Play + Sbt + Protractor

    Scala + Play + Sbt + Protractor = One Build 欢迎关注我的新博客地址:http://cuipengfei.me/ 我所在的项目的技术栈选用的是Play fra ...

  9. ASP.NET SignalR 2.0入门指南

    ASP.NET SignalR 2.0入门指南 介绍SignalR ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程.实时Web功 ...

  10. 博客加上“Fork me on Github”彩带

    给你的博客加上“Fork me on Github”彩带 起 如今,随着Git的大热以及Github的优越性,许多知名开源项目都将源代码托管到Github上了.在Github上不仅可以托管自己的开源项 ...