使用Mono进行.NET开源编程 |
作者: Tony Patton 2005-05-30 11:0 AM |
Mono是一种基于.NET Framework的开放源代码平台。本文介绍了该平台如何提供在Windows、OS X 和多种UNIX/Linux下灵活的开发机制。
什么是Mono?
Mono的诞生基于这样一个事实:C#语言和CLI(Command Language Infrastructure即通用语言构架)已经为ECMA作为标准而接受。Mono库包括了.NET兼容库(包括ADO.NET、System.Windows.Forms和ASP.NET)以及Mono所指定的第三方类库。用户还可以将Mono运行时(runtime)嵌入到应用程序中,使得程序的打包和发布更为简便。此外,Mono提供了一个IDE,一个调试器,还有一个文档浏览器。
如何安装Mono
Mono可以从该项目的Web站点中免费获取(http://www.mono-project.com/Downloads),你可以选择下载Linux(通用安装版本,支持SUSE和Red Hat)、Windows和OS X下的不同版本。你可以下载全部的源代码并对其进行编译(如果你的平台不支持以上三种版本,这将是唯一的办法),或者是直接下载合适的安装包。本文中我们按照下载安装包的方式进行叙述。
一旦根据你使用的平台下载了所需的安装包后,安装过程将随操作系统不同而有所不同。在编写本文时,我将Mono安装在了运行Windows XP和SUSE Linux 9.2的两台计算机上。在Windows环境下,安装过程非常简单,只需要下载安装包然后在系统上运行就可以了。而另一种操作系统处理起来则有些麻烦。Linux环境下的安装包括多个单独的文件,这些文件同Mono平台的不同方面功能相关。这里是Mono针对SUSE的部分软件包:
* mono-devel- 1.0.6-1.ximian.9.1.i586.rpm—Mono核心包和C#编译器
* mono-core- 1.0.6-1.ximian.9.1.i586.rpm—Mono核心运行时
* mono-data- 1.0.6-1.ximian.9.1.i586.rpm—数据库核心
列表中的每一个文件都是RPM(Red Hat Package Manager)文件。这些文件需要在Linux环境下使用rpm命令行工具进行安装。例如,使用如下命令就可以安装Mono运行时:
rpm – i mono-core- 1.0.6-1.ximian.9.1.i586.rpm
在安装结束之后,你需要立即将相关目录添加到系统目录中去,这样就可以无需指定完整路径来使用相关命令。在Windows下你需要通过控制面板来实现,Linux中则是使用PATH命令。注意:如果在安装过程中遇到任何问题,我建议你访问Got Mono? Web站点(http://www.gotmono.com/)。它能够为你排除故障提供很好的参考。
Mono工具集
在安装完Mono之后,你或许会用到它的各种工具。以下就是这些工具的一部分:
* mono—Mono解释器。允许在没有JIT的情况下执行应用程序。这一工具允许从命令行中运行应用程序。在微软.NET Framework下没有相关的工具。
* mcs—C#编译器。该编译器接受的命令行选项同微软C#编译器完全相同。
* monodies—该工具允许将应用程序转换为IL(Intermediate Language即中间语言)。它的功能类似于微软的ildasm.exe。
如果要获取工具的完整列表,请参阅Mono文档。该文档对每一种命令的选项都进行了描述。
创建Mono应用程序
现在我们来通过创建一个简单的应用程序来看看如何使用这些工具。如下代码将向控制台输出一条简单的信息:
using System;
namespaceBuilder.Samples {
public class MonoDemo {
public static void
Main(string[] args)
{Console.WriteLine("Check out
Builderau.com.au");
} } }
我们将以上代码保存为MonoDemo.cs,随后使用Mono的C#编译器:
mcsMonoDemo.cs
编译结果是生成了MonoDemo.exe文件。该文件的.exe扩展名在Windows环境下而言非常常见,但对Linux系统则不是。
因此,我们通过命令行解释器来运行我们的例子程序:mono MonoDemo.exe。这一例子的关键在于我们可以在Windows、Linux、Mac OS X等任何能运行Mono或the Windows .NET Framework的平台上运行编译之后的文件。这是因为Mono编译器将代码编译为人们熟知的IL中间形式。微软的C#编译器也完成相同的工作,但Mono并没有完整的安装.NET的类库,它安装了额外的Mono指定库。因此,并不是所有通过Mono开发的应用程序都可以在微软.NET Framework下运行,反之亦然。
因此,在确定目标平台和以后对兼容性的需求时,你必须把上面这点考虑在内。你还应当经常访问Mono站点。由于该站点经常会提供一些新的功能(例如类库),你可以使自己的项目保持随时更新。对微软产品而言同样如此。