据我所知,程序集由一个或多个模块和资源文件(如果有)组成。
如果在C#中编译项目,则编译器只需将代码转换为托管模块,然后将该模块放入程序集中。现在我的问题是,大会何时会有超过1个托管模块?
答案 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
查看现有装配中的模块结构