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

 我来答
greystar_cn
2018-01-17 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
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程序集了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式