随着微软的.NET开源的推动,如今在.NET的实现上有了三个.NET Framework,Mono和.NET Core。常常被问起Mono的稳定性怎么样,后续Mono的前景如何,要回答这个问题就须要搞清楚这三个.NET 实现之间的关系和未来如何演进。html
到目前为止(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未来仍是颇有事情作的了。linux
.NET Core是一个模块化的开发栈,它是将来的全部.NET平台的基础。.NET Core Framework团队的高级程序经理Immo Landwerth在博客中也提到.NET Core开源有两大缘由:git
做为跨平台的.NET的基础。github
构建并受益于一个更为强大的生态系统。web
好比.NET和Mono二者是彻底独立的,不少代码是平台无关的,因此不少工做都是重复劳动。合做构建一个单一的软件栈是最理想的。根据文章 .NET Core Open Source Update,目前.NET Core 只完成了.NET Framework的25%的功能。windows
.NET平台有三大件:框架
1、C#语言,也就是ECMA-334,这是天生跨平台的,C#的附带内容,你应该完全的明白公共运行时(CLR)。CLR以及公共语言基础(CLI)标准在ECMA-335中有定义,这也是CLR标准。模块化
2、Visual Studio,这是天生不能跨平台的,Mono有Xamarin studio;spa
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的一个跨平台发行版。