【问题标题】:Why and Where do we need Managed Modules为什么以及在哪里需要托管模块
【发布时间】:2013-02-28 03:05:06
【问题描述】:

我知道托管模块是包含 PE32 标头、CLR 标头、元数据和 IL 代码的逻辑代码容器。程序集可以包含使用程序集链接器 (AI.exe) 链接的多个托管模块。但是 VS 不支持多个托管模块程序集。我想知道如果我们不能在没有程序集的情况下使用托管模块等,我们何时以及为什么需要托管模块。我们不能只使用程序集吗?

我确信有一个合乎逻辑的解释,但我不确定我知道它是什么:-)

有关什么是托管模块的更多信息:What is a Managed Module (compared to an Assembly)?

【问题讨论】:

  • 你会想看看 Ecma 335,第 II.6.1 章,它给出了模块的基本原理。它是代码共享​​>的单位。非常晦涩,我想不出有什么好用的。从事编译器工作的微软程序员也没有。

标签: c# .net clr .net-assembly


【解决方案1】:

图表posted at the other question 看起来很清楚:

基本上,当您想将代码组织为程序集中的容器时,您会使用托管模块。理论上,这应该会给你更好的灵活性。

实际上,这种情况几乎不会发生,因为大多数人将他们的解决方案组织为一个项目集合,每个项目都有自己的关联 DLL。这种安排允许您在物理上换出 DLL,而无需替换整个(多模块)程序集。

【讨论】:

  • 您能否详细说明答案中的灵活性部分。“理论上,这应该会给您更好的灵活性。”
  • 好吧,因为它是一个容器。这与文件夹或 zip 文件为您提供的灵活性相同。或者,就此而言,您可以将物品放入任何容器中。您可以将其视为一个单元;移动它,按名称调用它等。但大多数人使用 DLL 作为他们的容器。
  • 那么编译器如何决定从哪里创建一个新的.net模块呢?
  • VS 解决方案中的每个项目都构建自己的 DLL,其中包含一个托管模块。我实际上不知道如何在单个 DLL 中创建多个模块。我从来不需要。
  • 并不是“大多数人”以这种方式组织他们的解决方案,而是我认为开发工具(Visual Studio)默认为每个程序集生成一个模块。我不知道这是否甚至可以在 IDE 中更改而无需借助手动构建步骤。
猜你喜欢
  • 2019-05-10
  • 2014-06-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
相关资源
最近更新 更多