.NET 可移植可执行文件与 .NET 程序集

.NET Portable Executable File VS .NET Assembly

我很困惑。在我读过的一些文章中,PE 是 PE 中的程序集和 IL 代码存储。
在其他人中,我读到 PE 在 PE 中有一个关联的程序集清单和 IL 代码存储。在一些文章中,我读过 IL 存储在程序集中,并且在 CLR header 部分的 PE 文件存储信息以指示 PE 文件是 .NET 可执行文件。 PE 文件和.NET 程序集是否相同? IL 代码存储在哪里?

我不明白你看到的区别,我会一一回复"yes"。

更具体地说,您所谓的 PE 可执行文件,典型的 Windows 可执行文件,包含一个启动 .NET VM 的存根和一个包含要传递给 VM 的已编译汇编代码的部分。

PE 是一种文件格式,一种信封,适用于本机和 .NET 可执行文件,

https://en.wikipedia.org/wiki/Portable_Executable

.NET 程序集必须是 PE,反之则不然。

将程序集视为一个 "logical" 概念。该程序集包含 IL 代码,以及其他类型的数据:资源、元数据、版本控制信息等。

DLL 和 EXE 文件是文件系统中的一个 "physical" 概念。这些文件在历史上有各种各样的格式,PE 就是其中一种格式。

程序集通常存储在 DLL 或 EXE 中,但并非必须如此:程序集可以发射到内存中或从内存中加载,没有任何物理(文件系统)表现形式。

A DLL can actually contain more than one assembly,虽然这不是常见的情况。

一个程序集被进一步划分为modules。模块包含 类。通常在给定的程序集中只有一个模块。