.NET中的托管模块是什么?它与程序集有什么不同? PE文件(例如test.dll)是托管模块还是程序集?汇编/托管模块如何与磁盘上的物理文件相对应?
答案 0 :(得分:13)
管理模块通常被理解为指的是仅包含IL代码的模块,没有直接的机器代码。
模块位于普通PE文件中。
程序集是一组1个或多个模块,其中一个指定为“head”(将查找确切的术语[1])。虽然模块本身并没有多大用处 - 组件是原子单元。
例如,您可以拥有一个包含2个DLL和EXE的multui-module程序集。多模块组件很少见。
Don Box的书Esssential .NET,Richter CLR通过C#提供了很好的主题报道。有关完整的详细信息,Serge Lidin .NET 2.0 IL Assembler一书和CLI标准更完整。
[1]根据http://www.programmersheaven.com/2/FAQ-DOTNET-DOTNET-Assembly-Explained
程序集可以是单个文件,也可以由多个文件组成。在多文件的情况下,有一个主模块包含清单,而其他程序集作为非清单模块存在
回答实际问题: -
.NET中的托管模块是什么?它与程序集有什么不同?
它是一个子集 - 一个DLL可以是一个没有子模块的主模块 - 因此也是一个程序集
PE文件(例如test.dll)是托管模块还是程序集?
绝对是一个模块。如果它还有一个清单而没有子模块,它也是一个程序集
汇编/托管模块如何与磁盘上的物理文件相对应? 每个模块都是一个文件。 (如果您感兴趣,ILMerge等工具可以合并模块)
答案 1 :(得分:0)
模块包含IL,其中许多链接在一起以创建一个程序集,该程序集通常位于PE中,如.exe或.dll。
PE也可以包含本机(非托管)代码。
答案 2 :(得分:0)
托管模块是已编译的IL 源代码的版本。该 构建的文件的扩展名 从源文件制作模块时 是.netmodule。
程序集是DLL或.exe 包含托管模块的文件, 资源和元数据。