目的:
把公司用Visual Studio 2005開發的項目通過mono移植並運行在Linux平台上。
前言:
以前沒接觸過Linux,更不要說在Linux上做什麼移植和用mono做項目(更重要的這些都是英文的東西,T_T英語水平不好)。好在網絡部之前就裝好一台Linux的機器,系統是openSUSE,因為openSUSE是Novell的,所以估計裡面的mono環境已集成在裡面,所以直接拿來用就行了,網上也有關於mono, xsp,mod_mono等的安裝教程。
Mono的1.2.5版本沒有ASP.NET的Desiger,但網上說可以在vs上開發移植到Linux上用。
環境:
openSUSE, mono, xsp2,mod_mono,apache2,moma
說明:xsp是mono自帶的一個簡單的web服務器,apache則是一個功能強大的web服務器(http服務器),mod_mono是一個模塊用於apache(apache是模塊化設計),關於apache後面會詳細介紹。
英文資料是這樣說的:
Mod_Mono is an Apache 1.3/2.0/2.2 module that provides ASP.NET support for the web's favorite server, Apache (http://httpd.apache.org).
XSP is a standalone web server written in C# that can be used to run your ASP.NET applications with minimal effort.
配置過程:
之前在openSUSE的虛擬機上運行其自帶的實例(桌面上的ASP.NET.Source文件夾,裡面有一個index.html文件,算是個幫助文檔),實例代碼放到/srv/www/htdocs路徑上,在浏覽器輸入URL:http://localhost/directoryname/page.aspx結果有些實例可以運行有些則不可以,而且還以為在Visual Studio 2005上開發的程序直接放到那個路徑上就可以直接運行,結果不行,錯誤提示應該是說找不到路徑。
那些不能運行的實例可能由於虛擬機的問題,所以就用一台直接安裝上openSUSE系統,果然實例都可以運行,但自己在Visual Studio 2005上做的程序還是不行。分析原因得出:當初想在Visual Studio 2005上做的程序是不是不能直接拿到Linux上用而還要做些什麼修改之類(實際上並不是這樣),/srv/www/htdocs是用於apache服務器的路徑,要做相應的配置(一頭霧水)。所以就用mono自帶的web服務器xsp,mono的官方網站就有介紹包括用法,http://www.mono-project.com/XSP,具體命令和執行如下。
# cd 路徑
路徑 # xsp2
Listening on address: 0.0.0.0
Root directory: 路徑
Listening on port: 8080
Hit Return to stop the server.
浏覽器輸入URL:http://localhost:8080/page.aspx
值得注意的是C#1.0用xsp而C#2.0就用xsp2。結果用vs2005做的一個小程序可以順利運行,用Production_System系統做測試時一般頁面正常顯示但BillBoard的頁面就不能顯示,沒想到解決辦法就嘗試用apache。
有關apache安裝和配置的中文資料有很多,但提及到用於.net的並沒多少,只有零星的一些,所以只好先熟悉一下如何配置apache服務器。比較好的資料有Red Hat Linux 9網絡服務的第7章配置Apache服務器和Apache HTTP Server Version 2.2 文檔。最後結合http://www.mono-project.com/Mod_mono或
http://gonzalo.name/blog/files/mod_mono.html的資料完成配置。下面寫出具體如何配置。
主要是配置apache2文件夾裡的httpd.conf文件,直接右擊選Open with “gedit”打開進行配置比較方便,當然也可以用命令來配。附上httpd.conf文件的中文翻譯http://blog.csdn.net/linuxnote/archive/2004/08/23/82289.aspx。
1、在httpd.conf文件加入,把mod_mono模塊包含到apache裡
Include etc/apache2/conf.d/mod_mono.conf
2、在mod_mono.conf文件的節點裡加入
LoadModule mono_module /usr/lib/apache2/mod_mono.so
這個用於C#2.0
MonoServerPath /usr/bin/mod-mono-server2
3、在httpd.conf文件添加如下配置,好像代碼只能放在xsp/test目錄下,原因不明,以後再研究。
Alias /test "/usr/lib/xsp/test"
MonoApplications "/test:/usr/lib/xsp/test"
<Location /test>
SetHandler mono
AllowOverride None
Order allow,deny
Allow from all
</Location>
4、保存文件然後重啟服務器,命令如下,注意apache2也是用於C#2.0。
# service apache2 restart
5、打開浏覽器輸入http://服務器IP/test/index.aspx,會看到XSP的歡迎頁面(這只是xsp上的測試實例用於apache的應用,如果要用於自己的開發的項目還要做些調整)。
6、將開發的源碼文件放到/test:/usr/lib/xsp/test下,假設目錄為/usr/lib/xsp/test/Production_System,其主頁文件為Login.aspx,訪問地址http://IP/test/Production_System/Login.aspx,奇怪的是此時報頁面錯誤.沒辦法了,修改httpd.conf,將test虛擬目錄直接指到這裡(注意:發現這裡目錄名字不能有”_”符號,所以下面就去掉了)。
Alias /test "/usr/lib/xsp/test/ProductionSystem "
MonoApplications "/test:/usr/lib/xsp/test/ProductionSystem "
<Location /test>
SetHandler mono
AllowOverride None
Order allow,deny
Allow from all
</Location>
訪問http://IP/test/Login.aspx正常顯示,至於為什麼報頁面錯誤,還不知道是啥原因。而之前在xsp上不能顯示的BillBoard頁面在這裡可以顯示(還有些細節的問題等待解決),至於原因有待研究。最後整個Production_System看起來移植到Linxu是可行的,但要完美的運行起來還有細節問題要解決,而用moma測了一下Production_System的dll文件也出現了一些issues,例如外部調用dll問題。
整個的配置過程就是這樣,有點亂,其中很多的問題沒解決。看起來在Linux上安裝和配置軟件是件復雜的事情,有待繼續研究。
補充:指定任意路徑的項目和令mod_mono處理多個程序
Alias /test "/usr/lib/xsp/test/ProductionSystem"
Alias / Hello_Mono "/usr/mypages/Hello_Mono"
MonoApplications "/test:/usr/lib/xsp/test/ProductionSystem"
MonoApplications "/Hello_Mono:/usr/mypages/Hello_Mono"
<Location /test>
SetHandler mono
AllowOverride None
Order allow,deny
Allow from all
</Location>
<Location / Hello_Mono>
SetHandler mono
AllowOverride None
Order allow,deny
Allow from all
</Location>
參考資料:
主要是mono的官方網站和些博客上的文章,這裡不列舉。
總結:
由於這是首次接觸Linux並通過mono進行移植,此文檔沒什麼高深技術,只用於記錄這個過程方便記憶,有待完善。如果有什麼不正確的地方歡迎大家指出。
注:原創作品,允許轉載,轉載時請標明文章原始出處。http://blog.sina.com.cn/s/blog_5085944d01008kdc.html