作者仙人掌工作室
众所周知C#是Microsoft推出的NET语言只能在NET平台上运行例如Win xMENTXP和Win CE之类的操作系统但是现在却有了一个叫做Mono的项目它的目标就是把NET及其编程语言移植到非Windows的平台上现在C#是唯一被移植到非Windows平台的NET语言
在任何一个平台(操作系统+硬件体系)上编写和运行程序的三个最根本的需求是库编译器/解释器运行环境库以类和方法(函数)的形式提供常用的例程简化大型程序的编写NET框架也不例外包含了许多类库另外把程序转换成可执行形式以及运行执行文件时编译器和运行环境是必不可少的Mono软件包包含了NET类库的一部分一个C#编译器和NET运行环境CLR(Common Language Runtime公共语言运行时环境)
Mono声称支持LinuxSolarisFree BSD和MS Windows除了Intel x系列的CPU(各类Pentium等)之外据说还要支持SparcPowerPC和Strongarm处理器
下面就来看看如何在Linux上运行Mono
命令行应用
先从Mono主页()下载软件执行下面的命令安装所有RPM
rpm ivh *rpm
安装完成后所有基本的动态执行库包括SystemDatadllSystemdllSystemDrawingdllSystemWebdll和SystemXmldll都被复制到/usr/lib下接下来在Linux文本编辑器中输入下面的内容把文件保存为HelloMonocs
class HelloMono
{
public static void Main(string[ ] args)
{ SystemConsoleWriteLine(Hello Mono);
}
}
执行下面的命令编译C#文件
mcs HelloMonocs
mcs是Mono的C#命令行编译器与MS NET SDK的csc编译器相似mcs也有很多命令行选项上面的命令将生成可执行文件HelloMonoexe注意这个执行文件不是Linux执行文件而是一个NET执行文件或者说这个文件的可执行代码形式是中间语言(ILIntermediate Language)要运行这个执行文件必须执行如下命令
mono HelloMonoexe
Linux控制台上将显示出Hello Mono关于mcs和Mono的更多说明请执行man mcs或man mono参考其man文档
GUI应用
Mono不支持Windows Forms但在C#编程中可用GTK #编写GUIGTK #是GTK+图形库的C#支持工具可从下载下载完成后先要安装RPM
rpm Uvh *rpm nodeps
解开gtksharptargz
tar zxvf gtksharptargz
进入子目录gtksharp执行
/configure prefix=/usr
make
make install
完成这一步骤之后重新启动一次与GTK#有关的所有动态代码模块(gtksharpdllatksharpdllgdksharpdllglibsharpdll以及pangosharpdll)都会被复制到/usr/lib目录编译用GTK#制作GUI的C#程序时必须通过r参数引用它们GTK#下载包中包含了几个示例程序如HelloWorldcsMenucsButtonAppcs等编译这些文件的命令如下
mcs r gtksharp r glibsharp HelloWorldcs
mcs r gtksharp r glibsharp r SystemDrawing Menucs
mcs r gtksharp r glibsharp r SystemDrawing ButtonAppcs
下面来看看如何通过r选项引用前面各个dll动态模块执行startx命令启动X Window进入终端窗口再进入示例程序所在目录执行下面的命令分别运行各个程序
mono HelloWorldexe
mono Menuexe
mono ButtonAppexe
Mono项目还在完善和发展之中还没有移植好全部NET类但不管怎样它对许多人来说将是一个好消息有关Mono C#类库移植进展的信息请访问/l
考虑一个典型的服务器/客户机式NET应用最终用户只与客户端打交道客户端最好是方便的GUI应用许多人还会希望使用熟悉的Windows平台但是对于他们来说服务器端使用Windows还是Linux完全无关所以服务器端可以用带有Mono的Linux构造节省了配备专用Windows服务器的投资Mono也将为应用迁移带来方便如果Mono能够顺利发展Windows开发者也将能够为Linux或其他非Windows平台开发应用如果这样的话不久之后出现一个类似Visual Studio NET但免费或廉价的Linux开发IDE也说不定
然而所有这一切是否能够成为现实依赖于Mono是否能够茁壮发展也依赖于Mono与Windows平台上的NET框架兼容或相似程度另外一些因素也很关键例如Mono的性能GUI的友好程度等