首页 技术 正文
技术 2022年11月10日
0 收藏 878 点赞 2,941 浏览 769 个字

这一节先简单的讨论一下程序集以及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 开关生成的模块在不同环境下的运营情况
 
 CLR Via 第一 章 知识点整理(2)程序集和CLR的启动
所以在运行程序集之前大致做了如下几个动作:
1、先读取程序集的信息
2、创建对应环境的进程
3、加载MSCorEE.dll文件并调用方法初始化程序集
4、加载程序集
5、调用入口Main方法

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,491
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,294