前言

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知之甚少……

CentOS/RHEL肯定是用来做服务器的,既然这样何必还要装个MonoDevelop呢?——直接在Visual Studio中调试好再把程序集部署到CentOS上就好了。话虽这么说,但是Mono与.NET类库的很多实现还是有较大差别的(譬如:TypeDescriptor、Socket、Type.GetType(...)等,以后再另写文章来讲这些差别。),再加上Linux与Windows环境的巨大差异,这些都会导致我们的.NET程序在.NET on Windows上是正常的,但是放到Mono on Linux中运行却会出现各种古怪问题。平台兼容确实是个让人头痛的事情!

所以,在CentOS/RHEL开发机中装个MonoDevelop是非常必要的。当然,如果怕麻烦的话直接安装OpenSUSE会简单很多,但是,我一直受不了各种所谓面向普通用户的Linux分支版本,那些西施效颦般的界面和操作方式真心让人蛋疼,再加之希望开发与最终部署服务器的Linux分支相同以免不必要的再测试。

安装过程

首先,必须确保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打开那个文件进行格式转换吧:

# vim /usr/bin/gapi2-codegen

然后在vim里面输入(包括前面冒号):

:set ff?

如果你在vim中执行上述命令后,提示你的是 fileformat=DOS的话,那么请接着在vim中使用下列命令:

: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'

意思是不能把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行和449、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 安装笔记的更多相关文章

  1. MonoDevelop 4.2.2/Mono 3.4.0 in CentOS 6.5 安装笔记

    MonoDevelop 4.2.2/Mono 3.4.0 in CentOS 6.5 安装笔记 说明 以root账户登录Linux操作系统,注意:本文中的所有命令行前面的 #> 表示命令行提示符 ...

  2. 分布式文件系统 FastDFS 5.0.8 & Linux CentOS 6.7 安装配置

    原文:http://blog.csdn.net/wlwlwlwl015/article/details/52619851 前言 项目中用到文件服务器,有朋友推荐用fastdfs,所以就了解学习了一番, ...

  3. redis 3.0.1 在CentOS上的安装

    一.下载 wget http://download.redis.io/releases/redis-3.0.1.tar.gz 二.解压 tar xzf redis-3.0.1.tar.gz 三.进入 ...

  4. Mono on CentOS 6.3 安装笔记

    在网上找到篇关于yum的文章,写的很详细特此推荐下,在阅读本文之前建议先看看它: <CentOS yum源的配置与使用> 如果用的是移动光驱,建议不要开启本地的yum 的本地reposit ...

  5. Centos 7 图形安装笔记(超详细)

    1. 下载虚拟机(VMware Workstation Pro) 2. 安装虚拟机(Windows下安装虚拟机,自行网上搜索) 3. 下载Centos 7.4系统(国内建议使用阿里云: http:// ...

  6. RHEL/CentOS 7.X 安装笔记

    配置vim # 配置 vim 编辑器 yum install vim rm /usr/bin/vi ln -s /usr/bin/vim /usr/bin/vi vi /etc/vimrc # 开启语 ...

  7. centos git gitolite安装笔记

    export PATH=/home/git/bin:$PATH echo PATHgit branch 查看本地分支 git branch -a 查看远程分支 git fetch 获取远程分支 git ...

  8. linux(centos)环境下安装rabbitMq

    1.由于rabbitMq是用Erlang语言写的,因此要先安装Erlang环境 下载Erlang :http://www.rabbitmq.com/releases/erlang/erlang-19. ...

  9. CentOS 7 之安装Mono&MonoDevelop

    之前在园子里看过一篇文章说的是在CentOS 7上安装MonoDevelop的,一直想照着弄一遍都没有弄,今天深圳外面下暴雨,就在家里弄一下这个吧,以后也试着在Linux上面写写C#玩玩.这一试,还真 ...

随机推荐

  1. 标准产品+定制开发:专注打造企业OA、智慧政务云平台——山东森普软件,交付率最高的技术型软件公司

    一.公司简介山东森普信息技术有限公司(以下简称森普软件)是一家专门致力于移动互联网产品.企业管理软件定制开发的技术型企业.公司总部设在全国五大软件园之一的济南齐鲁软件园.森普SimPro是由Simpl ...

  2. .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加

    在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...

  3. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  4. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

  5. [LintCode]——目录

    Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...

  6. webpack学习总结

    前言 在还未接触webpack,就有几个疑问: 1. webpack本质上是什么? 2. 跟异步模块加载有关系吗? 3. 可否生成多个文件,一定是一个? 4. 被引用的文件有其他异步加载模块怎么办? ...

  7. 和我一起看API(一)你所不知道的LinearLayout补充

    楼主英语水平差,翻译的不好的话请多多指正,嘿嘿... A Layout that arranges its children in a single column or a single row. T ...

  8. 虚拟机VMware12.05下安装Ubuntu16.04几个关键地方

    在踩了自己按照网上的教程安装Ubuntu之后,仍然踩了不少坑,鼓捣了一段时间,才达到自己想要的界面.   下面就来说说,大家可能也会遇到的情况:   1.安装ISO镜像时候,路径直接选择 你从Ubun ...

  9. 【Star CCM+实例】开发一个简单的计算流程.md

    流程开发在CAE过程中处于非常重要的地位. 主要的作用可能包括: 将一些经过验证的模型隐藏在流程中,提高仿真的可靠性 将流程封装成更友好的界面,降低软件的学习周期 流程开发实际上需要做非常多的工作,尤 ...

  10. Vue.js——60分钟组件快速入门(上篇)

    组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HTML ...