MonoDevelop 4.0.9 on CentOS 6.3 安裝筆記

前言

Mono的前東家Novell公司旗下的SUSE Linux系列對Mono及MonoDevelop提供內置支持,因此在SUSE/OpenSUSE這些Linux系統中安裝MonoDevelop是很是簡便的。可是,在其餘Linux分支中要安裝MonoDevelop卻經常須要大費周折,爲何會這樣呢?主要問題出在.NET對Gnome/gtk庫的封裝上,在安裝MonoDevelop時,最多見的問題即是提示glib-sharp或者gnome-sharp等依賴組件不存在。其實要解決這些依賴問題不難,但在Linux中玩MonoDevelop的傢伙基本都是.NET開發人員 ——你懂的,.NET開發人員每每對Linux知之甚少……node

CentOS/RHEL確定是用來作服務器的,既然這樣何須還要裝個MonoDevelop呢?——直接在Visual Studio中調試好再把程序集部署到CentOS上就行了。話雖這麼說,可是Mono與.NET類庫的不少實現仍是有較大差異的(譬如:TypeDescriptor、Socket、Type.GetType(...)等,之後再另寫文章來說這些差異。),再加上Linux與Windows環境的巨大差別,這些都會致使咱們的.NET程序在.NET on Windows上是正常的,可是放到Mono on Linux中運行卻會出現各類古怪問題。平臺兼容確實是個讓人頭痛的事情!vim

因此,在CentOS/RHEL開發機中裝個MonoDevelop是很是必要的。固然,若是怕麻煩的話直接安裝OpenSUSE會簡單不少,可是,我一直受不了各類所謂面向普通用戶的Linux分支版本,那些西施效顰般的界面和操做方式真心讓人蛋疼,再加之但願開發與最終部署服務器的Linux分支相同以避免沒必要要的再測試。api

安裝過程

首先,必須確保Mono安裝成功(純屬廢話)。而後再執行下列命令來安裝gtk-sharp:服務器

# cd /usr/local/src
# wget http://download.mono-project.com/sources/gtk-sharp212/gtk-sharp-2.12.21.tar.gz
# tar -zxvf gtk-sharp-2.12.21.tar.gz
# cd gtk-sharp-2.12.21
# ./configure --prefix=/usr
# make && make install

很遺憾,在上面的configure命令中,你會獲得這樣一個錯誤提示:測試

/bin/sh: /usr/bin/gapi2-codegen: /bin/sh^M: bad interpreter: 沒有那個文件或目錄

這個提示很讓人崩潰,爲何呢?由於你去/usr/bin下面找,發現的確有個gapi2-codegen文件,這個文件明明在啊,爲何說沒有呢?!這是由於這個腳本文件格式問題所致使的,真是坑爹的源碼包啊。好吧,那就用vim打開那個文件進行格式轉換吧:google

# vim /usr/bin/gapi2-codegen

而後在vim裏面輸入(包括前面冒號):spa

:set ff?

若是你在vim中執行上述命令後,提示你的是 fileformat=DOS的話,那麼請接着在vim中使用下列命令:unix

:set fileformat=unix
:wq

好了,作完上述操做後請回到命令終端中,從新執行一遍configure命令,若是接着提示其餘文件亦有一樣的錯誤,請按上述步驟來一遍便可。安裝完gtk-sharp以後,接着來裝gnome-sharp吧,這個東東貌似好幾年沒有更新過了,可是它依賴的外部組件卻要麼失蹤、要麼被河蟹了。 調試

# cd /usr/local/src
# wget http://download.mono-project.com/sources/gnome-sharp2/gnome-sharp-2.24.1.tar.bz2
# tar -jxvf gnome-sharp-2.24.1.tar.bz2
# cd gnome-sharp-2.24.1
# ./configure --prefix=/usr
# make && make install

此次在make階段遇到一個代碼編譯錯誤: generated/CanvasShape.cs(200,41): error CS0030: Cannot convert type `GLib.Value' to `Art.VpathDash'
code

意思是不能把GLib.Valuel類型轉換成Art.VpathDash類型,所在的代碼文件位置於:
/usr/local/src/gnome-sharp-2.24.1/gnome/generated/CanvasShape.cs

打開這個cs文件找到錯誤處,內容以下:

[GLib.Property ("dash")]
public Art.VpathDash Dash{
    get{
        GLib.Value val = GetProperty ("dash");
         Art.VpathDash ret = (Art.VpathDash) val;
        val.Dispose();
        return ret;
    }
    set{
        GLib.Value val = new GLib.Value(value);
        SetProperty("dash", val);
        val.Dispose();
    }
}

這是關於gnome的代碼,俺也沒用過,索性直接將上面高亮的代碼改爲:Art.VpathDash ret = new Art.VpathDash();

保存退出,再從新執行make命令,又會遇到一個「找不到Mono.GetOptions.dll程序集」的編譯錯誤,這是因爲Mono.GetOptions.dll在現有版本中已經被重命名爲Mono.Options.dll了,可是GNOME C# Bind包源碼尚未及時更新所致。但若是把新版的Mono.Options.dll拷貝到該源碼同目錄中,並修改該編譯引用,則提示有些類和命名空間不存在,這說明不光程序集被更名了,連裏面的類和命名空間也改了。尼瑪,這就坑爹了...

那就乾脆把用到Mono.GetOptions.dll(這個程序集的名字取得太矬了,是臨時工寫的吧)的代碼廢了它,因而找到這個編譯腳本,其位於:/usr/local/src/gnome-sharp-2.24.1/sample/gnomevfs/Makefile,用vim打開它,將221行和44九、450這三行腳本註釋掉(以下所示):

#EXTRA_TARGET = TestXfer.exe
#TestXfer.exe: $(srcdir)/TestXfer.cs $(assemblies)
#    $(CSC) /out:TestXfer.exe $(references) -r:Mono.GetOptions.dll $(srcdir)/TestXfer.cs

上面註釋掉的編譯腳本應該不會引發什麼問題,由於看得出來那只是個sample裏面的測試項目!好了,若是人品沒問題的話,應該能夠完成gnome-sharp的編譯安裝咯。最後,執行MonoDevelop的編譯安裝便可:

# cd /usr/local/src/monodevelop-4.0.9
# ./configure --prefix=/usr
# make && make install

總結

在CentOS/RHEL這樣的Linux中安裝MonoDevelop主要遇到的問題就是像glib-sharp、gnome-sharp這樣的依賴組件沒有提供簡便的rpm包,而須要使用源碼進行編譯安裝,編譯就編譯吧,蛋疼的是這些源碼包中含有的各類硬傷、各類坑,這纔是讓像我這樣的Linux菜鳥無比痛苦之原因。

我花了大半天的時間來搞MonoDevelop在CentOS 6.3上的安裝,中間走了些彎路,由於我知道OpenSUSE中自帶MonoDevelop,因此先是從OpenSUSE的packages中找glib-sharp這樣的rpm包來裝,可是此路不通;而後在google上瘋狂找各類rpm包,期間google被河蟹n次,每次都要等上一陣才能用,那種感受真是對天朝恨得牙根癢啊~ 艹

最後,無圖無真相,特附上MonoDevelop 4.0.9在CentOS 6.3上的截圖一張,亦是記念哈!終於能夠將開發平臺遷移到CentOS/MonoDevelop中來了,亦但願MonoDevelop4能不負所望!

MonoDevelop 4.0.9 on CentOS 6.3

相關文章
相關標籤/搜索