今天中午我收到一个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. SQL触发器实例(下)

    基本语法: Create Trigger [TriggerName] ON [TableName] FOR [Insert][,Delete][,Update] AS --触发器要执行的操作语句. G ...

  2. WEBSERVICE-CXF服务端代码

    Spring + cxf 发布webservice 依赖的jar包 WEB.xml的配置 applicationContext.xml配置   部署在Tomcat中启动   出现的问题         ...

  3. sgu 183. Painting the balls 动态规划 难度:3

    183. Painting the balls time limit per test: 0.25 sec.memory limit per test: 4096 KB input: standard ...

  4. harbor私有镜像仓库的搭建与使用与主从复制

    harbor私有镜像仓库,私有仓库有两种,一种是harbor,一种是小型的私有仓库,harbor有两种模式,一种是主 从,一种是高可用仓库,项目需求,需要两台服务器,都有docker.ldap权限统一 ...

  5. docker(二)不管怎么样,先跑起来。运行一个samba,运行一个hello world。

    ---恢复内容开始--- 继续上一篇文章 访问https://hub.docker.com/r/jackadam/samba/ 这是我写的一个docker镜像. 下面有 无脑测试用: docker r ...

  6. static 关键字介绍

    大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大显身手的时候了!! Java 中 ...

  7. JVM自动内存管理:对象判定和回收算法

    可回收对象的判断方法 1.引用计数算法 2.可达性分析算法 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是 ...

  8. dubbo支持的注册中心

    dubbo支持的注册中心 Dubbo提供的注册中心有如下几种类型可供选择: Multicast注册中心 Zookeeper注册中心 Redis注册中心 Simple注册中心 ZooKeeper是一个开 ...

  9. NBUT 1218 You are my brother 2010辽宁省赛

    Time limit 1000 ms Memory limit 131072 kB Little A gets to know a new friend, Little B, recently. On ...

  10. pycharm中tensorflow代码不能自动补全或import红线问题解决

    正确安装并配置好pycharm+tensorflow环境之后,可能在pycharm中导入tensorflow会有以下问题: 1. " import tensorflow as tf &quo ...