.Net编译运行过程

 

一、.Net框架包含的东西

1、名词解释

   BCL:基类库(Base Class Library)系统和底层提供的最基本的类库

   CLR:公共语言运行时(Common Language Runtime) 

   CLS:公共语言规范(Common Language Specification) 主要用于实现多种语言之间的互操作性,是公共类型系统的子集。

   CTS:通用类型系统(Common Type System) 主要用于解决不同语言的数据类型不同问题,他是一种类型标准,在这个标准中不但实现了COM的变量兼容类型,还定义了通过 用户自定义的方式来进行类型扩展,所以.NET平台为目标语言通过建立本身数据类型与CTS之间的映射来实现与其他语言的数据类型的交互。

   CIL:公共中间语言(Common Intermediate Language)

   DLL: 动态链接库 ,应用程序拓展(Dynamic Link Library)

   JIT:即时编译器,运行解释器(Just-In-Time Compiler)

  程序集:程序集(Assembly) 是一个或多个模块和资源文件的集合。当一个程序集被打包形成时,它不仅会包含所有的原始文件内容,也会添加一个程序集清单,该清单包含了程序集的版本号、 语言、发布者、导入类型等信息。有趣的是,程序集清单可以被添加到程序集中的某个文件之上,编译器也可以为程序集清单单独创建一个文件。

        (1)程序集的数据可以分为:类型元数据,程序元数据,IL代码,资源。

                   元数据,元数据一般就是指描述自身的数据。
                  程序集元数据:包含程序集的版本信息,安全信息,签名等。
      类型元数据:记录了程序集将引用了哪些类,用户自定义了哪些类,字段,数据类型等一系列信息(VS的编程助手靠的就是反射获取类型元数据)。
         IL代码:MSIL,微软中间语言,微软跨语言的根基所在,所有的C#代码都编译成IL代码,保存在程序集中,在被CLR加载后,由JIT调用BCL,FTL即时编译成机器码来让CPU运行。

         (2)程序集支持多编程语言开发,就是一个程序集可以包含由不同编程语言定义和实现的模块。在程序集被编译形成时,所有这些类型已经被编译成中间代码,而不再带有原来编程语言的特性。

 应用程序域:在操作系统中,一个普通的应用程序通常占据一个操作系统的进程。操作系统的进程为应用程序提供了独立的内存空间,规定了代码的执行范围,并且提供了错误隔离机制。在.NET框架中,应用程序域(AppDomain)提供了和操作系统进程非常类似的功能。一个在CLR中运行的应用程序,将至少拥有一个应用程序域。和操作系统的进程相同,应用程序提供了代码的执行范围,并且为程序提供隔离。在多个应用程序域间通信是非常困难的,每个类型实例都会存放在一个应用程序域内,并且,所有域内的引用必须引用自己所在应用程序域的对象。和操作系统的进程不同的是,应用程序域的创建和销毁所需要的开销会相对较小。当然,CLR仍然在操作系统上运行,所以某个应用程序域必定运行在某个操作系统的进程内,在CLR的安排下,每个操作系统的进程也可以包含多个应用程序域。

 

 

2、代码编译过程

3、程序运行过程

 

4、完整编译和运行流程示意图

 5、CLR概览

 


---------------------
作者:我还是个孩子121
原文:https://blog.csdn.net/WandDouDou/article/details/80678449

posted @ 2018-11-29 18:02  luanxm  阅读(354)  评论(0)    收藏  举报