【问题标题】:What is a Managed Module (compared to an Assembly)?什么是托管模块(与程序集相比)?
【发布时间】:2012-04-09 15:57:00
【问题描述】:

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

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    托管模块一般理解为指只包含IL代码,没有直接机器代码的模块。

    一个模块存放在一个普通的 PE 文件中。

    程序集是一组 1 个或多个模块,其中一个被指定为“头”(将查找确切的术语 [1])。一个模块本身并没有多大用处 - 程序集是原子单元。

    例如,您可以拥有一个包含 2 个 DLL 和一个 EXE 的多模块程序集。不过,多模块程序集非常少见。

    Don Box 的书 Esssential .NET,Richter CLR via 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 等工具可以合并模块)

    【讨论】:

      【解决方案2】:

      一个模块包含 IL 并且它们中的许多被链接在一起以创建一个程序集,该程序集通常位于像 .exe 或 .dll 这样的 PE 中。

      PE 也可以包含本机(非托管)代码。

      This is a good intro to the concepts.

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-14
          • 1970-01-01
          相关资源
          最近更新 更多