12.2 Assemblies and Modules

The simplest assembly contains an assembly manifest and a single module containing the application's types, packaged as an EXE with a Main entry point. More complex assemblies may be composed of multiple modules (PE files), separate resource files, manifest, etc.

The element that defines the presence of an assembly is termed the assembly manifest. The assembly manifest is not a physical construct, but rather a set of metadata that can either be included in one of the existing PE files in the assembly, or can live in a standalone PE file.

An assembly may also contain multiple modules. This technique can increase the performance of applications that use assemblies that are loaded over the network, since the CLR only loads modules as the types contained within them are needed. In addition, each module can be written in a different language, allowing a mixture of C#, VB.NET, and raw MSIL. Although not common, a single module could also be included in several different assemblies. When using multimodule assemblies, the convention is for the module PE files to have a .netmodule extension.

Finally, an assembly may contain a set of resources, which can either be kept in standalone files or included in one of the PE files in the assembly.

    Part II: Programming with the .NET Framework
    Part IV: API Quick Reference