今天中午我收到一个Email,是关于以前写的一个MONO文章的疑问,我对此做了一些解释,希望与有相同问题的朋友一起分享一下,邮件内容如下:

我在网上找到了您写的一篇关于Mono的“在windows下使用Mono”的文章,我想问一下,在windows下开发的winForm程序,和使用Visual Studio开发的程序有什么区别,仅仅只是为了不使用JIT而提高运行速度的吗?再者,为什么要在windows上使用mono开发,在windows使用mono开发的程序可以直接移植到其他平台吗?我还有个疑问,我在这个网站上http://www.go-mono.com/mono-downloads/download.html,下载MONO平台,像下面这张图片一样,我选择的是基于openSUSE Linux系统的MONO平台,我应该点击哪个,打开后,选择哪个下载,打扰了,期待你的回答。

基于以上的问题,我想可以这样解释:
首先你可以把.NET和JAVA的框架理解成一样,我们编写的代码都是在上层代码,即使编译出来也不是机器代码,MS在提出.NET的时候就说可以和JAVA一样能跨平台,能跨平台的原理就是可以在不同平台上使用不同的JIT将我们编写的上层语言解释为对应的机器语言,而问题在于目前的“JIT”是一个MS产品,这个产品的目的是将我们写的上层语言翻译成Windows可以识别的机器语言,另外MS并没有提供其他平台的“JIT”,实际上MONO就是一个第三方开发的“JIT”,当然MONO除了可以将上层代码解释成Linux的机器语言外也可以将其解释为Windows的机器语言。
 
因此,MONO和JIT是同一层次的东西,只是MONO解释出来的东西,在Windows平台上没有MS的JIT好,速度慢,并且功能要少一些(不能解释WPF,大部分的WCF也不能解释,在Winform方面也有一些功能解释不了)。
 
原则上来讲做好的exe和你使用MoNO还是MS的DotNETFrame是没有关系的,因此你可以使用VS来写程序,编译出来EXE,然后用MONO来运行这个程序,但是问题是VS是使用MS的JIT来解释程序的,所以在开发的时候就很有可能超出了MONO能解释的范围。如何保证使用VS的程序不超出MONO能解释的范围呢?MONO的官网上提供了一个兼容性测试工具,但是这个东西不是免费的。
 
使用MONO的优势主要有2点:
1.可以跨平台
2.可以将MONO运行时的一些核心DLL文件直接打包在安装包里,而不需要安装整个框架,这一点是与MS的 .netFramework相比是一个非常大的优势,将必要的MONO运行时DLL文件打包压缩也就10多M,现在.NET4.0也要40多M,现在有很多项目就已经用MONO来开发了,我是做3D游戏的,现在的Unity3d引擎就是就MONO写的内核
 
要想保证Window和Linux的兼容性你可以在Windows下的MonoDevelop里写程序,建议不要使用WinForm的方式开发,因为Winform本向是Win32技术,兼容性在Linux下不是很好,另外在在MONO Develop(MONO的IDE)里没有Winform的设计器,这一点很头疼的,MONO里建议使用GTK#这种第三方的Form技术来做UI,MONODevelop里可以选择程序的运行时是MONO还是.NET Framework,你选择MONO就好了。
但是如果你在Linux开发的话,可以使用Linux下的MONODevelop。
 
至于MONO在Suse下的安装,我只是在MONO刚出来的时候安装过,现在早就忘记了,所以还需要兄弟你自己研究一下,希望我的解释对你有所帮助!

为什么要使用MONO的更多相关文章

  1. tLinux 2.2下安装Mono 4.8

    Tlinux2.2发行版基于CentOS 7.2.1511研发而成,内核版本与Tlinux2.0发行版保持完全一致,更加稳定,并保持对Tlinux2.0的完全兼容.Mono 4版本要求CentOS 7 ...

  2. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  3. Mono为何能跨平台?聊聊CIL(MSIL)

    前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...

  4. 在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验

    准备工作 本篇文章采用Mono+CentOS+Jexus的方式实现部署.Net的Web应用程序(实战,上线项目). 不懂Mono的请移步张善友大神的:国内 Mono 相关文章汇总 不懂Jexus为何物 ...

  5. 【月入41万】Mono For Android中使用百度地图SDK

    借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...

  6. 运用Mono.Cecil 反射读取.NET程序集元数据

    CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改.CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修 ...

  7. Mono on CentOS 6.3 安装笔记

    在网上找到篇关于yum的文章,写的很详细特此推荐下,在阅读本文之前建议先看看它: <CentOS yum源的配置与使用> 如果用的是移动光驱,建议不要开启本地的yum 的本地reposit ...

  8. MemoryMappedFile 在 Mono in Linux 的开发笔记

    前言 MemoryMappedFile(简称MMF)类是.NET中对内存映射文件进行操作的类,内存映射文件是非常高效的本地IO方案,由操作系统提供内存与IO文件之间的映射转换,对内存映射文件的更改由操 ...

  9. 在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)

    [题外话] 闲的无聊竟然想尝试测试自己做的项目在不同操作系统上的性能表现,所以决定试试在Linux上部署Apache和Mono的环境.由于平时很少接触Linux,所以从网上找了几篇文章(附在相关链接中 ...

  10. Ubuntu下利用Mono,Jexus搭建Asp.Net(MVC) Web服务器

    最近在Ubuntu上搭建了Asp.Net的Web服务器,其中遇到很多问题,整理一下思路,以备后用. 搭建环境以及配套软件 Ubuntu: 11.10 Mono:3.0.6 下载地址(http://do ...

随机推荐

  1. httpclient 连接保持

    http连接重用 从一个主机向另外一个建立连接的过程时相当复杂的,而且包含了两个终端之间的很多包的交换,它是相当费时的. 连接握手的开销是很重要的,特别是对小量的HTTP报文. 如果打开的连接被重用来 ...

  2. scrapy-redis介绍(一)

    scrapy是python里面一个非常完善的爬虫框架,实现了非常多的功能,比如内存检测,对象引用查看,命令行,shell终端,还有各种中间件和扩展等,相信开发过scrapy的朋友都会觉得这个框架非常的 ...

  3. 下拉选择框 Spinner的用法。

    代码如下: package com.lixu.xialakuang; import android.app.Activity; import android.content.Context; impo ...

  4. python关于时间的计算,time模块

    import time, datetime # time.time 返回当前时间的时间戳(1970纪元后经过的浮点秒数)(格林尼治时间). # 1分钟60秒,1小时3600秒,1天86400秒. pr ...

  5. python中read()、readline()、readlnes()

    在python中 1.file.read()直接按原样读取文件,它通常用于将文件内容放到一个字符串变量中,如果文件大于可用内存,则不可能实现这种处理,因为原来文件里面是str_class,所以 fil ...

  6. 莪的拽、像省田各号①样没尽頭队——需求改进&原型设计

    需求改进&原型设计 1. 需求&原型改进 经过老师的指导以及组内成员的讨论后,我们认为之前的需求分析已经比较准确完备. 根据电子宠物的形象结构特点,以及模拟屏幕的空间限制,我们设计出了 ...

  7. Javascript的堆和栈的简单理解

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. BigPipe 大的页面分割成一个一个管道

    bigpipe创新驱动力  node实现 具体实现 过去十年,现代web站点变得更加动态和内容化,交互性也逐步增强, 传统的页面处理的方式却没有保持一样的速度发展,越来越不能满足用户对极致性能的追求. ...

  9. magento常见的问题及解决方法

    刚接触magento时,会遇到很多问题,大多数都是些magento配置及操作上的问题,因为刚接触magento不久所有对这些问题比较陌生也不知道如何处理.今日根据模版堂技术指导下和网上的相关例子,这里 ...

  10. Android manifest 获取源代码

    /********************************************************************************* * Android manifes ...