Typically, the assembly manifest is emitted as part of the build process along with the types, resources and type metadata. By default the output of each Visual Studio compiler is an assembly.
However, there are situations in which a user wishes to build individual modules and decide later how these modules should be grouped into assemblies. To support this model of development, each VS compiler provides command line switches to emit modules. We then ship a tool in the SDK called Alink that can be used to generate an assembly manifest for a set of dll’s, exe’s and resource files.
There are two sets of interfaces that can be used to emit assembly manifests: the unmanaged metadata apis (IMetadataAssemblyEmit) and the set of types in the System.Reflection.Emit namespace can also be used to generate assemblies. The VS compilers and several third party compilers use the unmanaged metadata interface to emit manifests. Tools like managed script engines commonly use the types in System.Reflection.Emit to build assemblies on the fly.