由于.Net需要可移植性,因此.Net程序里面其实并不是机器码——实际上是MS的一种中间代码,也就是经过了一半编译过程的代码。既然是独立于系统的,.Net也就很容易被移植到MS没有兴趣/不想移植的系统上。由此,mono便诞生了——可以在Linux/BSD/unix-like上跑.Net程序。
貌似mono自己写了.Net的一大堆类库(当然很多还没有写出来…… 但可以混混了~)。
从前装好mono,运行的时候,报告gdiplus.dll找不到。我把Windows下面那个搬到了很多地方,都没有用。今天再试,突然想到可能需要原生的gdiplus,一看,果然发现有libgdiplus这个port,装好之后出现了gdiplus.so等。再运行,就没有原先的问题了。
但是,mono的不完整的实现还是限制了使用…… 我用它运行从前写的ReadAsBmp程序(能够把一个文件的任何部分当作Bmp处理等),基本上可以用,但是PictureBox的Load() mono 没有实现,载入外部图像的时候就挂掉了。而另一个 NewLines 程序 (其实功能和常见的WinLinez差不多,五个珠子连起来就消掉的小游戏,为了解决自动缩放/存盘/跨平台等功能而自己写的,给我妈玩……)由于Form.set_MainMenuStrip() mono 没有实现,窗口都没出来就挂掉了,看来目前还不能使用菜单部分啊~
总的来说,mono 已经不错了,只要能够完善类库,比起Java还是很有竞争力的。