阿宽

Nothing is more powerful than habit!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.Net 框架开发平台体系架构1

Posted on 2010-09-06 23:53  宽田  阅读(328)  评论(0编辑  收藏  举报

  .Net 框架包含两个部分:通用语言运行时(CLR).Net框架类库(FCL)

  CLR   

    通用语言运行时(Common Language Runtime,简称CLR)是.Net框架的核心。意为它是一个可被各种不同的编程语言所使用的运行时。所以只要编译器能够编译面向CLR的代码,开发人员可以使用任何自己喜欢的语言来编写代码。

  CLR好处:

    将编译器看作是一个语法检查器和“正确代码”的分析器。它们对我们的源代码进行检查,确保我们编写的所有东西都有意义,最后输出描述我们意图的指令序列。而我们不用提心使用不同的语法进行开发。

  托管模块的生成过程

    我们可以使用任何支持CLR的编程语言来创建源代码文件。然后使用相应的编译器来做语法检查和源代码分析。但是不管使用的是何种编译器,最后生成的结果都是一个托管模块(Managed Module)。即使用CLR支持的编程语言,编写源代码文件。然后使用该语言的编译器进行语法分析和语义分析,然后生成托管代码。  

  托管模块

    一个需要CLR才能够执行的标准Windows可移植可执行文件。(portalbe executable 简称PE)。  

  托管模块的各个组成部分:

组成部分

描述

PE表头

  标准的Windows PE文件表头,类似于通用对象文件格式(Common Object File Format,简称COFF)表头。

  表头指出了文件的类型:GUI(图像用户界面),CUI(控制台用户界面),或者DLL(译注:DLL在以前表示 Windows中的动态链接库文件,即Dynamic Link Library,它是以动态链接的方式提供的一组函数库。

  在.net平台中,由于和传统的动态链接库文件有着相同的扩展名.dll,所以DLL文件的名称 被沿用了下来,但其含义已经有所改变。.NET中的DLL特指程序集文件的一种形式),

  另外该表头还包括一个时间标记用于表示文件创建的时间。

  对于仅包含 IL代码的模块,该表头的大多数信息会被忽略。

  对于包含有本地CPU代码的模块,该表头还会包含有关本地CPU代码的一些信息。

CLR表头

  包含标识托管模块的一些信息(可以被CLR或者一些实用工具解析)。

  这些信息包括托管模块所需要的CLR版本号,一些标记,托管模块入口点方法(Main方 法)的MethodRef元数据标记,以及有关托管模块的元数据、资源、强命名、标记和其他一些意义不是太大的信息的位置和尺寸

元数据

  每个托管模块都包含一些源数据表。

  元数据表主要分两种,一种用于描述源代码中定义的类型和成员,一种用于描述源代码中引用的类型和成员

中间语言(IL)代码

  编译器在编译源代码时产生的指令。CLR在运行时会将IL代码编译成本地CPU指令

 

  IL代码

    大多数早先的编译器产生的代码都是面向特定CPU的体系的。而所有与CLR兼容的编译器产生的都是IL代码。由于生成期和执行受CLR管理的缘故,IL代码有时也被作托管代码(managed code)。

 

  元数据(metadata)

         所有面向ClR的编译器都需要为托管模块产生完整的元数据。

 元数据就是一个数据表的集合,在这些表中,其中一些用于描述托管模块的中所定义的内容(比如所定义的类型和它们的成员),另外还有一些用于描述托管模块中所引用的内容(比如被引用的类型和它们的成员)。

元数据是一丝早先的技术如类型库、接口定义语言(IDL)文件的一个超集。需要指出的是CLR的元数据远比它们完整。而且像类型库和IDL,元数据总是和包含IL代码的文件相关联。实际上,元数据总是和这些代码一起被嵌入到同一个EXE/DLL文件中,两者根本可可能分离。因为编译器总是同是增长生元数据和IL代码,并且总是同时将它们嵌入到生成的托管模块中,所以元数据和它所描述的IL代码之间总能保持同步。