首先想给初学者推荐下《CLR via C#》这本好书,作.Net开发的开发者应该都读一下。为避免广告之嫌,因此这里只提供豆瓣书评的连接。php
CLR 做为.Net 程序跨平台运行的载体,和Java的JVM有着相似的功能(JAVA为跨平台而生,实现这一目标离不开JVM)。html
随着.NET Framework的日益发展CLR也有突飞猛进的变化。这些变化为开发带来更多有用的特性,在提升开发效率的同时也提升了程序的性能和稳定性。编程
通用语言运行时(CommonLanguageRuntiome,CLR)最先被称为下一代Windows服务运行时(NGWS Runtime).它是直接创建在操做系统上的一个虚拟环境,主要的任务是管理代码的运行。浏览器
.NET平台结构图安全
CLR如今支持几十种现代的编程语言为它编写代码,而后以一种中间语言(Intermediate Langeoage,IL)代码的造成被执行。而且,CLR还提供了许多功能以简化代码的开发和应用配置,同时也改善了应用程序的可靠性。如你所知,若是某种语言的编译器是以运行时为目标的,那么利用该语言开发生成的代码在.NET中被称为托管代码(MSIL),由于这样的代码是直接运行在CLR上的,因此具备与平台无关的特色。服务器
目前有哪些语言支持CLR架构
微软已经为多种语言开发了基于CLR的编译器,这些语言包括:C++/CLI、C#、Visual Basic、F#、Iron Python、 Iron Ruby和IL。app
除此以外,其余的一些公司和大学等机构也位一些语言开发了基于CLR的编译器,例如Ada、APL、Caml、COBOL、Eiffel、Forth、Fortran、Haskell、Lexicon、LISP、LOGO、Lua、Mercury、ML、Mondrian、Oberon、Pascal、Perl、PHP、Prolog、RPG、Scheme、Smaltak、Tcl/Tk。编程语言
在.NET平台结构图中,CLR的上面是.NET的基类库,这组基类库包括从基本输入输出到数据访问等各方面,提供了一个统一的面向对象的,层次化的,可扩展的编程接口。从.NET平台结构图中也能够看到,基类库能够被各类语言调用和扩展,也就是说不论是 C#,VB.NET仍是F#,VC++.NET,均可以自由的调用.NET的类库。ide
从上图能够看到CLR提供的功能,如类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Exception Manager)、向下兼容(COM Marshaler)等,具体的说,.NET上的CLR为开发者提供以下的服务:
CLR 在整个.Net Framework 程序执行过程的模型,C#、VB.Net,C++.Net 代码经过编译器生成了MSIL(托管代码),而后CLR用JIT翻译成native code ,最后就能够直接执行啦。
C#版本 和.Net Framework 版本以及CLR依赖关系 和新特性添加列表,
The .NET Framework 4.5 is an in-place update that replaces the .NET Framework 4 on your computer, and similiarly, the .NET Framework 4.5.1 4.5.2, and 4.6 RC are in-place updates to the .NET Framework 4.5, which means that they use the same runtime version, but the assembly versions are updated and include new types and members. After you install one of these updates, your .NET Framework 4 or .NET Framework 4.5 apps should continue to run without requiring recompilation. However, the reverse is not true. We do not recommend running apps that target a later version of the .NET Framework on the .NET Framework 4.5.
上面的整体意思就是:
从.net 4 开始,若是您想把.NetFramework 4.0+ 到更新的更新版本的.NetFramework,只需从新指定目标.Net Framwork而后从新编译代码便可,反之不可行。
之因此能够这样作是由于这几个.NetFramework版本的CLR都是4.0版本的。
The .NET Framework versions 2.0, 3.0, and 3.5 are built with the same version of the CLR (CLR 2.0). These versions represent successive layers of a single installation. Each version is built incrementally on top of the earlier versions. It is not possible to run versions 2.0, 3.0, and 3.5 side by side on a computer. When you install version 3.5, you get the 2.0 and 3.0 layers automatically, and apps that were built for versions 2.0, 3.0, and 3.5 can all run on version 3.5. However, the .NET Framework 4 ends this layering approach. Starting with the .NET Framework 4, you can use in-process side-by-side hosting to run multiple versions of the CLR in a single process. For more information, see Assemblies and Side-by-Side Execution.
In addition, if your app targets version 2.0, 3.0, or 3.5, your users may be required to enable the .NET Framework 3.5 on a Windows 8 or Windows 8.1 computer before they can run your app. For more information, see Installing the .NET Framework 3.5 on Windows 8 or 8.1
这段话的意思是
顺便看下 各个.Net Framework 新功能:
将来.NEtFrameWork 会有新的兄弟进来一块儿构建.Net 跨平台和云架构的梦想。
上图中Core CLR是Asp .Net vNext很重要的核心之一,虽然官方没说,但基本上就是一个精简版的CLR,拿掉了绘图等功能,让Server和Cloud程序更高效
至于MonoCLR,你们看名字就知道是为了更好的支持Mono这个开源的新秀的。
Update1:摘自MSDN的《使用 CoreCLR 编写 Silverlight》
自 2005 年 10 月发行 CLR 的 2.0 版本后就开始了 CoreCLR 的设计。它的两个主要设计目标是大小和兼容性:从编程人员的角度来看,针对 CLR 的编码应该始终相同,而从用户的角度来看,下载必须很是小。因为 Silverlight 旨在提供一组不一样于桌面 CLR 的方案,所以,咱们能够进行一些更改,以简化 CoreCLR 并容许咱们缩减 Silverlight 的安装大小。可是,堆栈底部的一致性相当重要。行为差别(即便这些行为差别都正确)代表堆栈上部有错误。
为了确保兼容性,咱们在堆栈底部的各个组件中使用相同的代码。执行引擎和虚拟机都是相同的。其中包括类型系统和元数据、垃圾回收器 (GC)、JIT 编译器、线程池以及运行时引擎的其余核心部件。
可是,为了适应 Web 应用程序方案,进行了一些更改。例如,富 Internet 应用程序一般简单且运行时间短,JIT 编译器主要侧重于减小启动时间,而非执行更复杂的优化操做。一样,服务器垃圾回收模式能够对使用类似分配模式的多个工做线程进行优化,而对 Web 托管应用程序则行不通。所以,Silverlight 只包含针对交互式应用程序进行优化的标准工做站 GC。可是,在 Silverlight 应用程序中使用 Microsoft 中间语言 (MSIL) 和元数据的方式与在针对桌面的托管应用程序中的使用方式彻底相同,并且应用程序的行为在用户的桌面上和在浏览器上一致。
事实上,Silverlight 并不打算取代桌面 CLR,这就引起了核心引擎中最大的变化:CoreCLR 将与桌面 CLR 进程并行运行。