您的位置:首页 > 其它

二丶一步一步的来学习.net框架,什么是CLR?

2016-06-19 13:55 204 查看
1. CLR(Common Language Runtime)-  公共语言运行时。

CLR是.net 的核心框架的一部分,在学习clr的时候要了解一个程序集。  

程序集包含了一个清单,这个清单相当于一个目录,描述了程序集本身的信息,例如程序标识(名称丶版本丶文化)丶程序集包含的资源(Resources)丶组成

程序集的文件。清单之后就是元数据了。如果说清单描述了程序集自身的信息,那么元数据则描述了程序所包含的内容。这些内容包括:程序集包含的模块丶类型丶类型

的成员的可见性等。注意,元数据并不包含类型的实现,有点类似于的.h头文件。在.net中,查看元数数据的过程叫做反射。然后还包含CIL的程序代码。

    我们知道程集中的CIL代码是不能直接运行的,还需要CLR的支持。总的来说,CLR是一个软件层的代理,它管理了.net程序集的执行,主要包括:管理应用程序域丶加载

和运行程集丶安全检查丶将CIL代码即时编译为机器代码丶异常处理丶对象析构和垃圾回收等。

    CLR有点类似于JAVA的虚拟机。

    CLR的主要作用:.NET 程序集(CIL代码)————————CLR(转换成本地机器代码)——————————本地系统

    CLR以什么样的形式位于什么位置:由于CLR本身用于管理托管代码,因此它是由非托管代码编写的,并不是一个包含托管代码的程序集,也不能用IL DASM查看。它位于

C:\SystemRootMicrosoft.NET\Framework\版本号下,视安装的机器不同有两个版本 一个工作站msorwks.dll 和一个服务器的版本 mscorsvr.dll

   CLR是如何运行的:操作系统在运行.exe时,首先会检查PE头,根据 PE来创建合适的进程。接下来会检查是否存在CLR头,如果存在,就会立即载入MsCoree.dll。这个库文件是.net框架的核心组件之一,注意它也不是一个程序集。MsCoree.dll 是一个很细的软件层。加载了MsCorEE.dll之后,会调用其中的_CorExeMain()函数,该函数会加载合适版本的CLR。 在CLR运行之后,程序的执行权就交给了CLR. CLR会找到程序的入口点,通常是Main方法,然后执行它。这里包含了以下过程:1
加载类型 2.验证 3.即时编译。

可以看出来采用这种架构的一个好处就是.net程序集可以运行在任何平台上,不管是Windows丶UNIX,还是其他操作系统,只要这个平台拥有针对于该操作系统的.net框架就可以运行.NET程序集了。

2. CLI(Common Language Infrastructure)-  公共语言基础。

      CLI是一个国际标准,由ECMA和ISO进行了标准化.它只是一个概念和汇总,CLI包括:CIL丶CTS丶CTS 丶VES丶元数据丶基础框架。简单来说,CLI是一个标准,而.NET框架中是这个标准的具体实现。在CLI中,并没有CLR的概念,只有VES,而CLR就是.NET框架中VES的具体实现。

     

  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  .net