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

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM