An assembly is the basic unit of versioning, culture, and deployment. Your source code is ultimately assimilated into an assembly that becomes available for distribution.
From the assembly consumer's perspective (the external view), an assembly contains the following:
Type metadata (describing the properties, methods, and fields of each type defined in the assembly).
MSIL code (the implementation of each type defined in the assembly).
Assembly manifest (describing overall information about the assembly).
Resources (e.g., strings and bitmaps).
From the assembly developer's perspective (the internal view), an assembly consists of one or more executables (PE files) called modules, each of which contains type metadata (optional), manifest, resources ...