.NET程序集及其执行(IL、元数据、托管模块、JIT)

  • 一、从源代码文件到托管模块再到程序集

           不管选择了哪种.NET语言编程,需要明白的是,尽管.NET二进制文件与非托管Windows二进制文件(*.dll或*.exe)具有相同的文件扩展名,但它们的内部却是完全不同的。具体说来,.NET语言源代码文件经过相应的编译器编译后变成.NET二进制文件,.NET二进制文件不包含特定于平台的指令,它包含的是平台无关的IL(Intermediate Language,中间语言)和类型元数据。这种必须在.NET运行时环境下执行的代码称为托管代码(managed code),这些包含托管代码的二进制单元称为托管模块(managed module)。图1清楚显示了这个流程。

    图1 将源代码编译成托管模块

     

          但是CLR(公共运行时)实际模块工作,它只和程序集(assembly)工作。程序集是一个或多个模块/资源文件的逻辑性分组。图2展示了托管模块和程序集的关系,图中一些托管模块和资源(或数据)文件准备交由一个工具处理。工具生成代表文件逻辑分组的一个PE32(+)文件(一种Windows可执行文件类型)。实际发生的事情是,这个PE32(+)文件包含一个名为清单(manifest)的数据块。清单也是元数据表的集合。这些表描述了构成程序集的文件、程序集中的文件所实现的公开导出的类型以及与程序集关联的资源或数据文件。

    图2 将托管模块合并成程序集

     

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值