随着微软的.NET开源的推进,现在在.NET的实现上有了三个.NET Framework,Mono和.NET Core。经常被问起Mono的稳定性怎么样,后续Mono的前景如何,要回答这个问题就需要搞清楚这三个.NET 实现之间的关系和将来如何演进。

到目前为止(2015.2.17),微软在Windows平台上的.NET Framework的实现最为完整,但是.NET Framework和windows操作系统有很深的绑定,难以跨平台。Xamarin主导的Mono项目在.NET 的基础类库实现上有一些不够完美。随着2014年 Xamarin和微软发起.NET基金会,微软在2014年11月份开放.NET框架源代码。在.NET开源基金会的统一规划下诞生了.NET Core 。也就是说.NET Core Framework是参考.NET Framework重新开发的.NET实现,Mono是.NET Framework的一个开源的、跨平台的实现。经常有朋友对Mono和.NET Core 有疑问,微软主导开发了.NET Core,那么还有Mono什么事呢。回答这个问题就是要搞清楚我们有各式各样的操作系统,windows,linux,mac,bsd,unix,各种操作系统之间的差异是很大的,最明显的就是UI方面,了解这些差异就很容易搞清楚Mono将来还是很有事情做的了。

.NET Core是一个模块化的开发栈,它是未来的所有.NET平台的基础。.NET Core Framework团队的高级程序经理Immo Landwerth在博客中也提到.NET Core开源有两大原因:

作为跨平台的.NET的基础。

构建并受益于一个更为强大的生态系统。

比如.NET和Mono两者是完全独立的,很多代码是平台无关的,所以很多工作都是重复劳动。合作构建一个单一的软件栈是最理想的。根据文章 .NET Core Open Source Update,目前.NET Core 只完成了.NET Framework的25%的功能。

.NET平台有三大件:

1、C#语言,也就是ECMA-334,这是天生跨平台的,C#的附带内容,你应该彻底的明白公共运行时(CLR)。CLR以及公共语言基础(CLI)标准在ECMA-335中有定义,这也是CLR标准。

2、Visual Studio,这是天生不能跨平台的,Mono有Xamarin studio;

3、.NET Framework基础类库。如果.NET Framework基础类库不能跨平台,没人会关心.NET的跨平台。所以微软不得不投入大量精力去开发全新的.NET Core Framework(就是现在github上的https://github.com/dotnet/corefx ),一边将.NET Framework中有用的代码搬过来,一边根据跨平台的需求重新实现。

从上面的分析,.NET跨平台的最大障碍就是基础类库的跨平台,由此也可以看出.NET基础类库的重要性。Mono也是在基础类库的实现上存在瑕疵,比如对WPF,WCF等框架的支持上不完善。像WPF这样的用户界面开发技术,各个平台上都有自己的原生开发库,用户界面应用原生开发,iOS应用应该用iOS的用户界面库才会让人觉得在iOS上最合适,.NET应用应该用微软的Windows用户界面库。

随着.NET Core Framework的开发完成,.NET Framework与Mono将基于.NET Core重新构建。.NET Framework将成为.NET Core在Windows上的一个发行版,Mono将成为.NET Core的一个跨平台发行版。

.NET Core与.NET Framework、Mono之间的关系的更多相关文章

  1. .net core .NET Core与.NET Framework、Mono之间的关系

    .NET Core与.NET Framework.Mono之间的关系 首先想要知道.NET Core与.NET Framework.Mono之间的关系,就必须他们分别是什么,有什么用途? 一. .ne ...

  2. ASP.NET Core 基础知识(一) ASP.NET Core是什么?与.NET Framework、Mono之间的关系 ?

    一.概念: ASP.NET Core 是一个开源的.跨平台的 .NET 实现.而 .NET Framework 是基于 Windows 的 .NET 实现,Mono 是 .NET Framework ...

  3. .NET Core 和 .NET Framework 之间的关系

    引用一段描述:Understanding the relationship between .NET Core and the .NET Framework. .NET Core and the .N ...

  4. .net版本之间的关系

    net framework 2.0,3.0与3.5三个版本之间关系如下: .net framework 2.0 = CLR 2.0 + FCL(framework class library) .ne ...

  5. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时

    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...

  6. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时(翻译)

    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...

  7. ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

    ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...

  8. ASP.NET Core 开发 - Entity Framework (EF) Core

    EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...

  9. [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)

    前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...

随机推荐

  1. 【HTML5】 web上的音频

    <!-- audio通过属性的设置可以控制音频播放的行为: 表6-2 audio元素的属性 ——————————————————————————————————————————————————— ...

  2. Python帮助文档中Iteration iterator iterable 的理解

    iteration这个单词,是循环,迭代的意思.也就是说,一次又一次地重复做某件事,叫做iteration.所以很多语言里面,循环的循环变量叫i,就是因为这个iteration. iteration指 ...

  3. dir命令只显示文件名

    dir /b 就是ls -f的效果 1057 -- FILE MAPPING_web_archive.7z 2007 多校模拟 - Google Search_web_archive.7z 2083 ...

  4. 上传图片预览JS脚本 Input file图片预览的实现示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. JavaOO面向对象中的注意点(三)

    1.接口 a.关键字:interface public interface Serviceable{ //TODO } b.属性:只能是 公共 静态 常量 属性--就算不写这三个关键字,也是默认这种情 ...

  6. [leetcode] 题型整理之图论

    图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...

  7. jQuery缓存数据

    很多同学在项目中都喜欢将数据存储在HTMLElement属性上,如 1 2 3 4 <div data="some data">Test</div> < ...

  8. OpenCV(三) 之 基本数据结构 CvMat和 IplImage

    OpenCV(三) 之 基本数据结构 CvMat和 IplImage CvMat IplImage OpenCv中基本的数据类型 类型 参数 表示 CvPoint int x,y 像素点 CvPoin ...

  9. CentOS 6.5 Nginx 配置

    1.安装所有 http功能: ./configure --user=www-data --group=www-data --with-http_ssl_module --with-http_reali ...

  10. 使用TextUtils.isEmpty简单化代码

    如果让你判断一个文本框是否为空(null)或者没有任何值(length=0),你会怎么怎样去写代码,很多初学者可能会这样写: if(text==null || text.length==0) {... ...