我是CLR的新手,我指的是Jeffrey Richter通过C#编写的CLR书。该书指出,使用兼容CLR的编译器对源代码进行的编译如下:
外卖:编译器仅生成受管模块的IL代码和元数据
从书中引用:
受管模块是标准的32位Windows便携式计算机 可执行文件(PE32)或需要以下操作的标准64位Windows可移植可执行文件(PE32 +)文件: CLR执行。
以下组件被列为托管模块的一部分:
PE32或PE32 +标头 CLR标头 元数据 IL代码
我的理解:编译器仅生成托管模块的一部分(IL代码和元数据)。
生成程序集: 根据该书,托管模块的 IL和元数据以及资源文件用于生成程序集
根据此Microsoft document about assemblies in CLR,托管模块本身不可执行
如果没有关联的程序集清单,则将不会执行可移植可执行文件(PE)中的Microsoft中间语言(MSIL)代码。
我对框架的理解如下:
问题:如果托管模块仅用于一个目的-成为程序集的一部分,而该程序集仅使用模块的IL代码和元数据,那么使用PE32(+ )和托管模块中的CLR标头?
这里的答案 https://stackoverflow.com/a/10065485/3574404解释说PE32文件可以包含比程序集更多的文件,但不能回答我的问题。