在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 =================== ...
随机推荐
- windows 开机自动登录,或者说是开机后自动进入桌面
这篇文章,对于XP以及XP以上版本有效,包括Windows Server服务器操作系统. 1.原理 --Windows自动登录的原理是,开始后,自动输入登录所使用的账号的用户名和密码,并且自动进入桌面 ...
- [译]Java 设计模式 之模板方法
(文章翻译自Java Design Pattern: Template Method) 模板方法设计模式定义了归档特定操作的工作流.它允许子类去修改特定的步奏而不用改变工作流的结构. 下面的例子表示模 ...
- leetcode 第43题 Wildcard Matching
题目:(这题好难.题目意思类似于第十题,只是这里的*就是可以匹配任意长度串,也就是第十题的‘.*’)'?' Matches any single character. '*' Matches any ...
- leetcode 第41题 Trapping Rain Water
题目: Given n non-negative integers representing an elevation map where the width of each bar is 1, co ...
- Java开发工具IntelliJ IDEA使用教程:创建新的Andriod项目
IntelliJ IDEA社区版作为一个轻量级的Java开发IDE,本身是一个开箱即用的Android开发工具. 注意:在本次的教程中我们将以Android平台2.2为例进行IntelliJ IDEA ...
- 再谈ORACLE CPROCD进程
罗列一下有关oprocd的知识点 oprocd是oracle在rac中引入用来fencing io的 在unix系统下,假设我们没有採用oracle之外的第三方集群软件,才会存在oprocd进程 在l ...
- Unity3D开发必备神器(Visual Studio Tools for Unity)
Unity3D开发必备神器(Visual Studio Tools for Unity) 开发Unity3D程序你用的什么IDE呢? 1.MonoDevelop 2.VS 可能你的回答是这样的,我用的 ...
- t_sql语句得到表中所有信息
--得到所有数据库SELECT Name FROM Master..SysDatabases ORDER BY Name --得到某一数据库的所有表SELECT Name FROM MyPhotos. ...
- 站点维护使用app_offline.htm页面提供友好的更新提示
进行站点维护时为了以一个友好的方式提示给用户,比如什么“本网站正在更新”等等的信息可以建立一个叫app_offline.htm 的静态HTM页面文件,其中修改成你要临时显示的内容,将其放在你的应用的根 ...
- Best jQuery Plugins of the Month – May 2014
1. jQuery referenceSection jQuery referenceSection by Scott Mascio ensures to help users in adding a ...