An assembly is a reusable, versionable, self-describing deployment unit for types and resources it is the primary building block of a .NET application. Assemblies provide the infrastructure to allow the runtime to fully understand the contents of an application and to enforce the versioning and dependency rules defined by the application.
An assembly consists of the following two logical elements:
The sets of types and resources that form some logical unit of functionality.
A manifest which is the metadata that describes how the types and resources relate and what they depend on to work properly.