装配多个托管模块

时间:2011-09-14 11:54:55

标签: c# clr

据我所知,程序集由一个或多个模块和资源文件(如果有)组成。

如果在C#中编译项目,则编译器只需将代码转换为托管模块,然后将该模块放入程序集中。现在我的问题是,大会何时会有超过1个托管模块?

2 个答案:

答案 0 :(得分:3)

这是对Netmodule vs. Assembly的一个很好的解释。

简而言之,出于以下原因,人们会使用多个模块:

  

多语言程序集。

     

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

     

单独维护的源文件。

     

如果程序集由多个开发人员维护,则将源文件分成小集合可能是有意义的。每个系列都由一个开发人员拥有。集合编译为netmodules,然后链接到最终程序集。

     

下载量小。

     

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

     

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

     

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

答案 1 :(得分:-1)

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

  • Project
  • Project.Utilities

这似乎是.Net程序集的组织方式classes -> modules -> assembly

编译器似乎通过类所在的命名空间命名模块。

您可以使用ildasm.Net Reflector

查看现有装配中的模块结构