头在.NET托管模块中的作用以创建程序集

时间:2018-11-17 11:18:05

标签: .net .net-assembly

我是CLR的新手,我指的是Jeffrey Richter通过C#编写的CLR书。该书指出,使用兼容CLR的编译器对源代码进行的编译如下:
enter image description here

外卖:编译器仅生成受管模块的IL代码和元数据

从书中引用:

  

受管模块是标准的32位Windows便携式计算机   可执行文件(PE32)或需要以下操作的标准64位Windows可移植可执行文件(PE32 +)文件:   CLR执行。

以下组件被列为托管模块的一部分:

  

  • PE32或PE32 +标头   
  • CLR标头   
  • 元数据   
  • IL代码

  • 我的理解:编译器仅生成托管模块的一部分(IL代码和元数据)。


    生成程序集: 根据该书,托管模块的 IL和元数据以及资源文件用于生成程序集 enter image description here

    根据此Microsoft document about assemblies in CLR,托管模块本身不可执行

      

    如果没有关联的程序集清单,则将不会执行可移植可执行文件(PE)中的Microsoft中间语言(MSIL)代码。

    我对框架的理解如下:

  • 托管模块不能独立运行
  • 托管模块构成了程序集的构建块
  • 仅将IL代码和元数据用于创建程序集。

    问题:如果托管模块仅用于一个目的-成为程序集的一部分,而该程序集仅使用模块的IL代码和元数据,那么使用PE32(+ )和托管模块中的CLR标头?

    这里的答案 https://stackoverflow.com/a/10065485/3574404解释说PE32文件可以包含比程序集更多的文件,但不能回答我的问题。

  • 0 个答案:

    没有答案