warensoft 我是科学家

Warensoft 我是科学家

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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应用程序(WinFormASP.NET)第一次运行的时候会比较慢,这是因为在CLR中存在一个名为JIT的工具(Just In Time Compiler,即时编译器),JIT会将中间语言编译为对应平台的本地代码,以提高运行速度。

通过上面的分析,我们可以发现,想让.NET能跨平台,取决于JIT是否能够将MSIL解释成对应平台的本地代码,即:不同的平台需要安装不同的CLR虽然,.NET可以跨平台的概念是由MS提出来的,但是MS只提供了一个Windows的实现,即:CLR,其实平台的CLR产品MS并没有开发。

因此,所谓的MONO其实就是第三方开发的,功能等同于CLR的一个.NET RunTimeMONO提供了不同平台的JIT实现。

2.        MONO的跨平台技术

MONO中兼容绝大部分CLR功能,但是运行效率不如CLR快(建议在Windows平台上使用CLR,而不是MONO),因此,绝大多数在Windows下开发的应用程序可以移植到其他操作平台上。

虽然MONO兼容大多数CLR功能,但是在MONO下直接开发基于Form(不是WinForm)的功能时,MONOIDE却不支持WinForm的设计,MONO建议的界面环境是GTK#或者是GNOME,开发模式大体上和WinForm相同。

另外,为了能够实现ASP.NET的跨平台,MONO提供了MONO_MODE Web服务器,以支持ASP.NET的运行。

为了实现.NET应用程序(WinFormASP.NET)的跨平台功能,有以下几点建议:

l           在应用程序里最好不要使用PINVOKE的平台调用技术,因为调用Win32DLL在其他平台上是不可行的,另外,直接调用自己编写的C/C++DLL在其他平台也不一定能运行。

l           如果程序中出现路径表达字符串中,尽量采用动态获取方式,或者是可配置方式,这是因为在不同的操作平台下,路径表达的方式是不同的。

3.        如何在Windows下安装MONO

MONO的官方网站是:http://www.mono-project.com/Main_Page,在主页上为大家提供了三个功能区,1,下载MONO的运行时,2.下载MONOIDE3.Visual Studio中集成的MONO工具(付费)。

用户首先要下载在Windows平台下的MONO运行时,如下图所示:

然后下载Windows下的MONO开发环境:MONO Develop,如下图所示:

将以上两个程序分别安装到Windows上,就可以进行MONO开发了。

4.        Windows下的MONO开发环境

MonoDevelop开发环境基本结构和VS差不多,当然功能远不及VS好用,其打开的界面如下图所示:

在这里我们打开一个用VS2008WinForm程序,如下图所示:

我们可以发现并没有WinForm的设计器。

下面可以直接运行该程序,如下图所示:

我们会发现这个应用程序除了图标是一个“猴子”外,别的也没有什么和VS做的程序不同,这是因为MONO Develop默认是会用CLR来解释.NET应用程序的,我们可以修改一下配置,让他使用MONO来解释,打开“Edit-Preferences-.NET RunTime,并将MONO设置为默认的.NET RunTime,如下图所示:

然后我们再来运行刚才的应用程序,如下图所示:

这个窗口的样式和CLR解释出来的样式,还是有点区别的,看起来有点怪。

 如果大家有什么问题可以给我发Email:warensoft@163.com

posted on 2010-06-18 13:21  王宇 warensoft  阅读(6930)  评论(6编辑  收藏  举报