CLR 这些年有啥变化吗? 随着.NET Framework的日益发展CLR也有日新月异的变化。这些变化为开发带来更多有用的特性在提高开发效率的同时也提高了程序的性能和稳定性。如果大家觉得还有必要把这块更新的更好还请多多反馈。如果觉的对您有用还请点击 “推荐”下我会持续更新更多新的内容。CLR是什么通用语言运行时(CommonLanguageRuntime,CLR)最早被称为下一代Windows服务运行时(NGWS Runtime).它是直接建立在操作系统上的一个虚拟环境主要的任务是管理代码的运行。CLR在.NetFramework中的位置.NET平台结构图CLR现在支持几十种现代的编程语言为它编写代码然后以一种中间语言(Intermediate Language,IL)代码的形成被执行。并且CLR还提供了许多功能以简化代码的开发和应用配置同时也改善了应用程序的可靠性。如你所知如果某种语言的编译器是以运行时为目标的那么利用该语言开发生成的代码在.NET中被称为托管代码MSIL因为这样的代码是直接运行在CLR上的所以具有与平台无关的特点。目前有哪些语言支持CLR微软已经为多种语言开发了基于CLR的编译器这些语言包括C/CLI、C#、Visual Basic、F#、Iron Python、 Iron Ruby和IL。除此之外其他的一些公司和大学等机构也位一些语言开发了基于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的类库。CLR内部结构从上图可以看到CLR提供的功能如类型安全(Type Checker)、垃圾回收Garbage Collector、异常处理(Exception Manager)、向下兼容(COM Marshaler)等具体的说.NET上的CLR为开发者提供如下的服务平台无关CLR实际上是提供了一项使用了虚拟机技术的产品他在操作系统之上并不要求程序的运行平台是 Windows系统只要是能够支持它的运行库的系统都可以在上面运行.NET应用。所以一个完全由托管代码组成的应用程序只要编译一次就可以在任何支持.NET的平台上运行.从Mono的出现变得更加真实啦,不用再羡慕JAVA啦跨语言集成CLR语序开发这以任何语言进行开发用这些语言开发的代码可以在CLR环境下紧密无缝的进行交叉调用例如可以用VB声明一个基类对象然后在C#代码中直接创建次基类的派生类。自动内存管理CLR提供了拉架收集机制可以自动管理内存。当对象或变量的生命周期结速后CLR会自动释放他们所占用的内存.跨语言异常处理版本控制避免了DLL灾难.NET安全简单的组件互操作性。自描述组件自描述组件是指将所有数据和代码都放在一个文件中的执行文件。自描述组件可以大大简化系统的开发和配置并且改进系统的可靠性。补充大家可以看下我总结的一篇有关GC的一些东西GC 快餐热卖CLR 执行示意图CLR 在整个.Net Framework 程序执行过程的模型C#、VB.Net,C.Net 代码通过编译器生成了MSIL托管代码然后CLR用JIT翻译成native code 最后就可以直接执行啦。CLR 版本发展史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 Framework 4.5 是.NetFramework 4.0的代替者.NET Framework 4.5.1 4.5.2, and 4.6 RC 是.NetFramework 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 versions 2.0, 3.0, and 3.5 每个版本都是在前一个版本基础上增量开发的.NET Framework versions 2.0, 3.0, and 3.5 不同版本的程序不能在同一机器上同时运行在不同CLR上。在安装 3.5 版后你将无需安装 2.0 和 3.0 版本2.0、3.0 和 3.5 生成的应用程序均可在 3.5 版上运行从 .NET Framework 4 开始在单个进程中可使用进程内并行运行在多个版本的CLR 。即4.0的dll引用了2.0的dll是4.0的代码在CLR4.0上运行而2.0的代码运行在CLR2.0上此外如果你的应用程序使用的是 2.0、3.0 或 3.5 版你的用户可能需要先在Windows7 Windows 8 或 Windows 8.1计算机上启用 .NET Framework 3.5然后才能运行应用程序。