具有多个托管模块的程序集

本文关键字:模块 程序集 | 更新日期: 2023-09-27 18:08:28

我明白一个程序集是由1个或多个模块组成的,如果有的话,还有资源文件。

如果你用c#编译一个项目,那么编译器会简单地把代码变成一个托管模块,然后把这个模块扔到一个程序集中。现在我的问题是,什么时候一个大会有超过1个托管模块?

具有多个托管模块的程序集

这是Netmodule和Assembly的一个很好的解释。

简而言之,使用多个模块的原因如下:

多语言程序集。

如果程序集由不同编程语言的源文件组成,则必须将相同编程语言的文件编译成netmodule,然后将它们链接到程序集中。

单独维护的源文件

如果程序集由多个开发人员维护,那么将源文件分离为小集合可能是有意义的。每个集合都由单独的开发人员拥有。集合被编译为netmodule,然后链接到最终的程序集。

下载占用空间小。

如果程序集托管在http站点中,CLR将只在第一次下载主模块。其余模块将按需下载。您可以将不常用的代码从主线代码中分离出来,并将不常用的代码编译为netmodule。用户只在需要时下载netmodule。

链接相同的源文件到多个程序集

您可能有一些在多个程序集中使用的通用代码。公共代码非常小,不值得将它们编译成单独的程序集。为了避免多次编译相同的源文件,您可以将它们编译成netmodule,然后将其链接到不同的程序集。

如果在Project命名空间中有一个类,在Project.Utilities命名空间中有另一个类,则有两个模块:

  • Project
  • Project.Utilities

这似乎是。net程序集组织的方式,classes -> modules -> assembly

编译器似乎按照类所在的命名空间来命名模块。

您可以使用ildasm或。net Reflector

查看现有程序集中的模块结构。