CentOS上 Mono 3.2.8运行ASP.NET MVC4经验
周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在Mono 3.2.8上运行成功MVC4。在此总结经验如下:
系统平台的版本:
CentOS 6.5 Mono 3.2.8 Jexus 5.5.1
VS2012 英文Ultimate版 由于采用的是英文版本,因此下面图片也都是英文版的界面。
完成工作:制作一个完整的MVC4 Internet应用(本例不含数据库,数据库的访问在以后的文章中谈),将其部署在Linux + Mono + Jexus环境。
步骤:
1、使用 .NET Framework 4生成MVC4;
2、卸载EF;同时删除或注释与EF相关的应用;
3、发布;
按上述步骤的详细操作如下:
1、使用 .NET Framework 4生成MVC4
在生成MVC4时,目前情况下,一定要使用 .NET Framework 4,不要使用 .NET Framework 4.5,否则,由于 .NET Framework 4.5虽然很好很强大,但由于它太新,在Mono上运行至今我未找到有效的完整运行办法,包括Windows Server 2008,如果不安装最新的Service Pack,都无法支持 .NET Framework 4.5。
因此,如下图,在创建新项目时,请注意保证使用 .NET Framework 4(见图片上部中间),

我创建是一个完整的Internet应用,如下图:

2、卸载EF;同时删除或注释与EF相关的应用
从小蝶惊鸿的文章Linux.Net学习手记(5),知道需要卸载EF。到“工具”菜单找到NuGet操作命令窗口或者管理器界面,将EntityFramework卸载。
注意虽然EF卸载可以把Dll引用及根目录下的Web.config文件进行修改,但对于MVC4的Internet应用来说,里面有一些需要使用EF的代码却不会自动卸载,需要手动删除或者注释。因为自己既然想使用ASP.NET MVC4运行在Linux上,就不打算使用MS SQL Server数据库,而是使用MySQL数据库,访问MySQL方式采取ADO.NET。所以,EF相关代码可以全部屏蔽。
首先,把Models目录下的AccountModels文件删除;然后,将Controllers目录下的AccountController删除;
生成解决方案(Ctrl + Shift + B),下面会有一些错误提示(我的有7、8个左右),按照错误提示,把错误提示的代码注释即可,这些代码与创建用户有关,使用了EF;直到生成的解决方案没有错误,在VS下运行,确保通过;
3、发布
周折最多的地方就是发布了。最初,发布到本地文件系统,其设置是这样的:

注意“设置”中选择了两个选项:“发布前删除所有现有文件”和“在发布期间预编译”,结果这样的发布,到Linux上后,出现了奇怪的结果:如果Controller中的Action返回的是字符串,即return "Hello, MVC4";,这样的路由没有问题;但如果返回的是ActionResult,即return View();就会出现错误信息!
小蝶惊鸿参与这个问题的解决,发现如果把第二项“在发布期间预编译”选掉(如下图),生成的发布文件放到Linux后,上述问题就解决了!

至此,一个完整的MVC4应用就可以运行在Linux之上了。
特别需要说明的是:本文经验只适用于Mono 3.2.8,其它版本的Mono可以参考,但无法保证适用性,因为版本差异貌似很大。
本文所述过程详细参考了Linux.Net学习手记(5),在实际操作过程中,发现在自己的这个操作中,即使不在Web.config中加入<globalization culture="zh-CN" uiCulture="en-US"/>,同时也不对Microsoft.Web.Infrastructure.dll进行删除,MVC4运行也是正常的。估计这就是版本不同造成的差别吧。
感谢小蝶惊鸿、张善友和Jexus服务器作者宇内流云,他们的文章对我将.NET应用到Linux上帮助很大。
实际网站在Linux运行成功后,再与大家分享。
CentOS上 Mono 3.2.8运行ASP.NET MVC4经验的更多相关文章
- 安装mono和jexus,运行asp.net程序
随笔- 62 文章- 1 评论- 7 raspberrypi(树莓派)上安装mono和jexus,运行asp.net程序 参考网址: http://www.linuxdot.net/ htt ...
- 在CentOS上部署基于dnx/coreclr的ASP.NET 5应用程序
在Ubuntu上写好了一个简单的ASP.NET 5应用程序,尝试将这个程序部署在没有mono环境的CentOS服务器上. 部署步骤如下: 1)安装libuv(KestrelHttpServer需要它) ...
- .NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点
在将“.NET跨平台之旅”示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 (博文链接)之后,我们有一个难以抗拒的冲动 —— 体验 ...
- 在Linux上以服务的方式运行ASP.NET Core站点
更新:用supervisor是更好的解决方法,详见 Linux下为 dotnet 创建守护进程 要在生成环境下在Linux服务器上跑ASP.NET Core站点,首先要解决的问题是以服务的方式运行AS ...
- raspberrypi(树莓派)上安装mono和jexus,运行asp.net程序
参考网址: http://www.linuxdot.net/ http://www.cnblogs.com/mayswind/p/3279380.html http://www.raspberrypi ...
- asp.net mvc4 过滤器的简单应用:登录验证
直接上代码,不要说话. ASP.NET MVC4过滤器的简单应用:验证登录 [AcceptVerbs(HttpVerbs.Post)] public ActionResult login(FormCo ...
- .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序
在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...
- centos下linux运行asp网站搭建配置-mono+nginx
一.首先安装一些需要的软件包 1. 首先更新CentOS上的软件包:yum –y update. 2. 安装一些需要的库: yum -y install gcc gcc-c++ bison pkg ...
- Mono 4.0 Mac上运行asp.net mvc 5.2.3
Mono 4.0 已经发布,二进制包已经准备好,具体的发布说明参见:http://www.mono-project.com/docs/about-mono/releases/4.0.0/. 今天在Ma ...
随机推荐
- DailyTick 开发实录 —— 开始
2009 年我读了李笑来老师的<把时间当朋友>,知识了柳比歇夫的时间记录法.当时激动坏了,马上动手实践起来.一开始的时候,是用一个小本子,走到哪儿都带着.完成一件事,就记录一下花费的时间. ...
- Hyper-v 安装CentOS 7 (其他虚拟机一样参考)
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html hyper-v安装很多人没弄过,我这里介绍一下.(其他虚拟机参 ...
- Content Security Policy 入门教程
阮一峰文章:Content Security Policy 入门教程
- Hive on Spark安装配置详解(都是坑啊)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...
- C#多线程之线程同步篇1
在多线程(线程同步)中,我们将学习多线程中操作共享资源的技术,学习到的知识点如下所示: 执行基本的原子操作 使用Mutex构造 使用SemaphoreSlim构造 使用AutoResetEvent构造 ...
- javascript中的事件冒泡和事件捕获
1.事件冒泡 IE 的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).以下面的HTML ...
- C# 索引器,实现IEnumerable接口的GetEnumerator()方法
当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...
- BPM配置故事之案例12-触发另外流程
还记得阿海么,对就是之前的那个采购员,他又有了些意见. 阿海:小明,你看现在的流程让大家都这么方便,能不能帮个忙让我也轻松点啊-- 小明:--你有什么麻烦,现在不是已经各个部门自己提交申请了嘛? 阿海 ...
- SQL面试笔试经典题(Part 1)
本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ...
- mysql 大表拆分成csv导出
最近公司有一个几千万行的大表需要按照城市的id字段拆分成不同的csv文件. 写了一个自动化的shell脚本 在/home/hdh 下面 linux-xud0:/home/hdh # lltotal 1 ...