周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在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经验的更多相关文章

  1. 安装mono和jexus,运行asp.net程序

    随笔- 62  文章- 1  评论- 7  raspberrypi(树莓派)上安装mono和jexus,运行asp.net程序   参考网址: http://www.linuxdot.net/ htt ...

  2. 在CentOS上部署基于dnx/coreclr的ASP.NET 5应用程序

    在Ubuntu上写好了一个简单的ASP.NET 5应用程序,尝试将这个程序部署在没有mono环境的CentOS服务器上. 部署步骤如下: 1)安装libuv(KestrelHttpServer需要它) ...

  3. .NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点

    在将“.NET跨平台之旅”示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 (博文链接)之后,我们有一个难以抗拒的冲动 —— 体验 ...

  4. 在Linux上以服务的方式运行ASP.NET Core站点

    更新:用supervisor是更好的解决方法,详见 Linux下为 dotnet 创建守护进程 要在生成环境下在Linux服务器上跑ASP.NET Core站点,首先要解决的问题是以服务的方式运行AS ...

  5. raspberrypi(树莓派)上安装mono和jexus,运行asp.net程序

    参考网址: http://www.linuxdot.net/ http://www.cnblogs.com/mayswind/p/3279380.html http://www.raspberrypi ...

  6. asp.net mvc4 过滤器的简单应用:登录验证

    直接上代码,不要说话. ASP.NET MVC4过滤器的简单应用:验证登录 [AcceptVerbs(HttpVerbs.Post)] public ActionResult login(FormCo ...

  7. .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序

    在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...

  8. centos下linux运行asp网站搭建配置-mono+nginx

    一.首先安装一些需要的软件包 1.  首先更新CentOS上的软件包:yum –y update. 2.  安装一些需要的库: yum -y install gcc gcc-c++ bison pkg ...

  9. 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 ...

随机推荐

  1. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  2. Java多线程

    一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程.   进程:进程 ...

  3. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

  4. .NET Core 系列5 :使用 Nuget打包类库

    NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系, ...

  5. scanf()中清除输入缓冲区的几种方法归纳

    应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就导致了前面的错误影响到后面的内容,为了隔离这种 ...

  6. 逆天Kali带你游遍大江南北~安全之前人铺路!

    0.Linux基础学习(基本指令) http://www.cnblogs.com/dunitian/p/4822807.html 1.Kali安装到移动硬盘或者U盘中~Linux系列通用方法(包括An ...

  7. Android GridView 通过seletor 设置状态和默认状态

    Android中可以通过selector控制GridView Item 的状态,而省去使用代码控制 GridView View Selector Xml文件 <?xml version=&quo ...

  8. winform 窗体圆角设计

    网上看到的很多winform窗体圆角设计代码都比较累赘,这里分享一个少量代码就可以实现的圆角.主要运用了System.Drawing.Drawing2D. 效果图 代码如下. private void ...

  9. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

  10. git init和git init -bare区别

    1 Git init  和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...