An assembly is a fundamental unit of a .NET application that contains executable code. An assembly contains metadata like its name and version, as well as types, classes, and references to other assemblies. Assemblies can be executable files or dynamic link libraries. The main parts of an assembly are its metadata, type metadata, MSIL code, and optional resources. Shared assemblies that will be used by multiple applications must have a strong name consisting of the assembly name, version, public key, and culture in order to be placed in the global assembly cache.