这一节先简单的讨论一下程序集以及CLR的初始化

虽然对应的编译器会生成托管模块,但实际上CLR不与托管模块工作,编译器除了编译还有将生成的托管模块转换为程序集的功能,微软还提供了工具AL.exe(程序集链接器)手动生成程序集。

程序集:

1、是一个或者多个模块或者资源的分组,是安全性、重用、版本控制的最小单元。

2、程序集还有一个类似于懒加载的机制,将不常用的类或者资源放在一个单独的文件中,当使用时才会下载,可以节约磁盘和缩短安装时间

3、此外程序集还可以自描述,在CLR读取程序集时无需额外信息,因为程序集自带了关于自生的所有信息,所以更容易部署

编译器会通过源码生成EXE、DLL文件,但无论哪一种最终都是由CLR运行,但运行CLR之前必须先安装.net Framework,判断是否安装只需检查System32目录中是否含有MSCorEE.dll文件即可,微软还提供了CLRVer.exe检查CLR的版本号工具。

但是并不是只要安装了.net Framework就可以运行程序集,需要对应程序集特定的环境才可以运行,例如生成的64位的程序集无法再32位的环境下运行,所以在运行程序集之前需要对检查程序集的信息,可以使用DumpBin.exe和CoreFlags.exe工具查看。

程序集的版本是由编辑器设置的,C#的编译器提供了一个/platform开关选项可以设置生成对应的不同程序集

以下是对应.platform 开关生成的模块在不同环境下的运营情况
 
 
所以在运行程序集之前大致做了如下几个动作:
1、先读取程序集的信息
2、创建对应环境的进程
3、加载MSCorEE.dll文件并调用方法初始化程序集
4、加载程序集
5、调用入口Main方法

至此就完成的CLR的所有准备工作,接下来才是重头戏,CLR如何是如何与程序集工作,你会还了解带托管代码的多处优势

CLR Via 第一 章 知识点整理(2)程序集和CLR的启动的更多相关文章

  1. CLR Via第一 章 知识点整理(3)CLR执行程序集的IL代码

    在了解CLR运行之前让我们先简单了解一下IL 除了编译器编译的IL代码,IL也是一种汇编语言,也就是说我们可以直接编写IL代码,当然也有对应的IL编译器,值得一提的是对于面向CLR的其他语言,CLR只 ...

  2. CLR Via第一 章 知识点整理(4) FCL、CTS、CLI和CLS

    FCL(Framework Class Library) Framework 类库: FCL是 .net Framework 包含的一组DLL程序集的统称,FCL包含了提供了很多功能,关于这一部分没有 ...

  3. CLR Via 第一 章 知识点整理(1)

    写这个纯粹是自己的一点学习总结,其实就学习的笔记整理,相当于对自己的一点督促,如有看到不正确的欢迎指出 一般我们写代码都是使用的高级语言,但是在CLR中运行的代码并不是我们直接写的代码,而是通过我们选 ...

  4. C#语言————第一章 第一个C#程序

    第一章    第一个C#程序 ******************C#程序***************     ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...

  5. 《零压力学Python》 之 第一章知识点归纳

    第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...

  6. C语言——第一章,1.4程序开发过程

    1.4程序开发过程 一,开发过程 1,分析问题,设计一种解决问题的途径(方案)★ 2,写出源代码 (*.c) 3,编译→(连接)   *.obj→(*.exe) 4,运行*.exe (可执行程序) 二 ...

  7. C#第一章 第一个C#程序

    第一个C#程序 namespace 是C#中组织代码的方式,它的作用那个类似java中的包 using 在Java中作用如果导入其他包 应该是用import关键字而在C#中应使用using关键字来引用 ...

  8. Java入门第一章知识点总结

    -d是directory 目录的意思 cls:清楚doc里面的内容 ipconfig:显示网络配置信息 java -version:检查安装的jdk版本信息 是类型自动向上转换.  在输出时,根据当前 ...

  9. 第一章 flex单词计数程序

    学习Flex&Bison目标, 读懂SQLite中SQL解析部分代码 Flex&Bison简介Flex做词法分析Bison做语法分析 第一个Flex程序, wc.fl, 单词计数程序 ...

随机推荐

  1. Memory Layout for Multiple and Virtual Inheritance

    Memory Layout for Multiple and Virtual Inheritance(By Edsko de Vries, January 2006)Warning. This art ...

  2. vue 中 echart 在子组件中只显示一次的问题

    问题描述 一次项目开发过程中,需要做一些图表,用的是百度开源的 echarts. vue推荐组件化开发,所以就把每个图表封装成子组件,然后在需要用到该图表的父组件中直接使用. 实际开发中,数据肯定都是 ...

  3. Js中常用知识点(typeof、instanceof、动态属性、变量作用域)

    1.Js中各类型的常量表示形式:Number:number     String:string    Object:objec 2.typeof运算符在Js中的使用:用于判断某一对象是何种类型,返回值 ...

  4. Window下Eclipse+Tomcat远程调试

    需求:       项目在开发环境跑得好好的,但是当发布到服务器上时,却出现了一些意外的问题.服务器上不可能给你装IDE调试工具啊,又没有很好的日志帮助下,这时候就用到了JVM的Java Platfo ...

  5. 剑指Offer_编程题_22

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...

  6. lcd驱动框架

    目录 lcd驱动框架 框图 程序分析 入口 打开open 读read 初始化registered_fb 注册 小结 程序设计 测试 方式一操作fb0 方式二操作tty 方式三操作终端 完整程序 tit ...

  7. Django订单接入支付宝

    1.. 去支付宝申请 https://open.alipay.com/platform/home.htm 注:因为创建应用正式接入支付宝需要营业执照,所以我们可以使用沙箱环境来测试. 2. 一次选择管 ...

  8. Harbo1.5.2离线搭建

    环境说明 操作系统版本:Centos7.5 docker版本:docker-ce 17.03.2 harbor版本:v1.5.2 docker-compose:  1.22.0 基础环境搭建 系统优化 ...

  9. JAVA字符串

    字符串   1. 字符串 1.1 字符串概述和特点 java.lang.String类代表字符串. API当中说:Java 程序中的所有字符串字面值(如 "abc" )都作为此类的 ...

  10. 第四节:Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案

    一. 背景 揭秘: 在前面的章节介绍过,Task出现之前,微软的多线程处理方式有:Thread→ThreadPool→委托的异步调用,虽然也可以基本业务需要的多线程场景,但它们在多个线程的等待处理方面 ...