在Windows平台下使用MONO
warensoft 中科院计算所培训中心
MONO已经发布了好几年了,为.NET技术跨平台技术提供了真正的实现,但是对大多数.NET开发人员来讲MONO最重要的意义是能够实现在Windows下开发出应用程序,并且在其他操作系统下运行。本文会提及以下几内容:
l 对于MONO的理解
l MONO的跨平台技术
l 如何在Windows下安装MONO
l 在Windows下的MONO 的开发环境
如果大家有什么问题可以给我发Email:warensoft@163.com
1. 对MONO的理解
很多人会问,MONO到底是什么,要解释这个问题,我们要先从.NET技术能够跨平台的原理说起,首先看看下面的结构图:
首先,.NET平台支持多种语言,MS为了解决不同语言之间数据类型兼容问题,在CLR中提供了MSIL机制(微软中间语言),不论是哪种语言,它们的数据类型都会被转化为中间语言。
其次,程序员们会发现,在.NET应用程序(WinForm,ASP.NET)第一次运行的时候会比较慢,这是因为在CLR中存在一个名为JIT的工具(Just In Time Compiler,即时编译器),JIT会将中间语言编译为对应平台的本地代码,以提高运行速度。
通过上面的分析,我们可以发现,想让.NET能跨平台,取决于JIT是否能够将MSIL解释成对应平台的本地代码,即:不同的平台需要安装不同的CLR。虽然,.NET可以跨平台的概念是由MS提出来的,但是MS只提供了一个Windows的实现,即:CLR,其实平台的CLR产品MS并没有开发。
因此,所谓的MONO其实就是第三方开发的,功能等同于CLR的一个.NET RunTime,MONO提供了不同平台的JIT实现。
2. MONO的跨平台技术
在MONO中兼容绝大部分CLR功能,但是运行效率不如CLR快(建议在Windows平台上使用CLR,而不是MONO),因此,绝大多数在Windows下开发的应用程序可以移植到其他操作平台上。
虽然MONO兼容大多数CLR功能,但是在MONO下直接开发基于Form(不是WinForm)的功能时,MONO的IDE却不支持WinForm的设计,MONO建议的界面环境是GTK#或者是GNOME,开发模式大体上和WinForm相同。
另外,为了能够实现ASP.NET的跨平台,MONO提供了MONO_MODE Web服务器,以支持ASP.NET的运行。
为了实现.NET应用程序(WinForm,ASP.NET)的跨平台功能,有以下几点建议:
l 在应用程序里最好不要使用PINVOKE的平台调用技术,因为调用Win32的DLL在其他平台上是不可行的,另外,直接调用自己编写的C/C++的DLL在其他平台也不一定能运行。
l 如果程序中出现路径表达字符串中,尽量采用动态获取方式,或者是可配置方式,这是因为在不同的操作平台下,路径表达的方式是不同的。
3. 如何在Windows下安装MONO
MONO的官方网站是:http://www.mono-project.com/Main_Page,在主页上为大家提供了三个功能区,1,下载MONO的运行时,2.下载MONO的IDE,3.在Visual Studio中集成的MONO工具(付费)。
用户首先要下载在Windows平台下的MONO运行时,如下图所示:
然后下载Windows下的MONO开发环境:MONO Develop,如下图所示:
将以上两个程序分别安装到Windows上,就可以进行MONO开发了。
4. 在Windows下的MONO开发环境
MonoDevelop开发环境基本结构和VS差不多,当然功能远不及VS好用,其打开的界面如下图所示:
在这里我们打开一个用VS2008做WinForm程序,如下图所示:
我们可以发现并没有WinForm的设计器。
下面可以直接运行该程序,如下图所示:
我们会发现这个应用程序除了图标是一个“猴子”外,别的也没有什么和VS做的程序不同,这是因为MONO Develop默认是会用CLR来解释.NET应用程序的,我们可以修改一下配置,让他使用MONO来解释,打开“Edit-Preferences-.NET RunTime”,并将MONO设置为默认的.NET RunTime,如下图所示:
然后我们再来运行刚才的应用程序,如下图所示:
这个窗口的样式和CLR解释出来的样式,还是有点区别的,看起来有点怪。
如果大家有什么问题可以给我发Email:warensoft@163.com