1. 程式人生 > >CentOS上 Mono 3.2.8執行ASP.NET MVC4經驗

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執行成功後,再與大家分享。