In general, a static assembly can consist of four elements:
The assembly manifest, which contains assembly metadata.
Microsoft intermediate language (MSIL) code that implements the types. It is generated by the compiler from one or more source code files.
A set of resources.
Only the assembly manifest is required, but either types or resources are needed to give the assembly any meaningful functionality.
The following illustration shows these elements grouped into a single physical file:
As you design your source code, you make explicit decisions about how to partition the functionality of your application into one or more files. When designing .NET code, you'll make similar decisions about how to partition the functionality into one or more assemblies.