什么是管理模块(与装配相比)?

时间:2009-08-25 07:24:22

标签: c# .net

.NET中的托管模块是什么?它与程序集有什么不同? PE文件(例如test.dll)是托管模块还是程序集?汇编/托管模块如何与磁盘上的物理文件相对应?

3 个答案:

答案 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也可以包含本机(非托管)代码。

This is a good intro to the concepts.

答案 2 :(得分:0)

  

托管模块是已编译的IL   源代码的版本。该   构建的文件的扩展名   从源文件制作模块时   是.netmodule。

     

程序集是DLL或.exe   包含托管模块的文件,   资源和元数据。