今天中午我收到一个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. spring cloud 学习(一)初学SpringCloud

    初学SpringCloud 前言 在SpringBoot的坑还没填完的情况下,我又迫不及待地开新坑了.主要是寒假即将结束了,到时又得忙于各种各样的事情……留个坑给自己应该就会惦记着它,再慢慢地补上…… ...

  2. BZOJ2590 [Usaco2012 Feb]Cow Coupons

    好吧...想了半天想错了...虽然知道是贪心... 我们每次找没有被买的两种价格最小的牛,比较a = 当前差价最大的 + 当前优惠券价格最小的牛与b = 当前非优惠券价格最小的牛 所以...我们要 先 ...

  3. Openwrt Support RESET Button (5)

    1 Scope of Document This document describes how to support reset button under openwrt system2 Requir ...

  4. Solrj调用Solr API

    在MyEclipse下的SSH项目,要调用Solr接口进行操作. 1.先运行solr 2.在已搭建好的SSH项目中用Solrj调用Solr的接口 3.导入如下solr的jar包到搭建好的SSH项目的W ...

  5. 迁移HTML5移动项目到PhoneGap

    MyEclipse开年钜惠 在线购买低至75折!立即开抢>> [MyEclipse最新版下载] 一.创建一个新的PhoneGap应用程序项目 PhoneGap应用程序项目的结构与HTML5 ...

  6. JQ延迟对象

    延迟对象初识 技术一般水平有限,有什么错的地方,望大家指正. ES6已经实现了延迟对象Promise,但是今天主角是JQ里面的延迟对象,套路其实都是差不多的.下面先看一个比较牵强的例子: <bu ...

  7. Linux便捷命令

    快捷键: tab:命令和文件名称补齐功能快捷键 Ctrl + c:中断当前程序 Ctrl + d:退出当前终端 求助快捷键: man:manual的简写,如man ls man命令: / string ...

  8. Python获取路径下所有文件名

    python 获取当前文件夹下所有文件名   os 模块下有两个函数: os.walk() os.listdir() 1 # -*- coding: utf-8 -*- 2 3 import os 4 ...

  9. Final阶段第1周/共1周 Scrum立会报告+燃尽图 01

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411] 版本控制:https://git.coding.net/liuyy08 ...

  10. pygame资源图片剪裁

    裁剪坟墓 def cropimg(image, region): from cStringIO import StringIO img = Image.open(image) # region = ( ...