The binary unit that contains the managed code is termed an assembly. In other way, when a *.dll or *.exe has been created using a .NET-aware compiler, the binary blob is termed an assembly. An assembly consists of one or more files (dlls, exe’s, html files etc.), and represents a group of resources, type definitions, and implementations of those types. An assembly may also contain references to other assemblies. These resources, types and references are described in a block of data called a manifest.
The manifest is part of the assembly, thus making the assembly self-describing.
An assembly is completely self-describing. As all information is in the assembly itself, it is independent of registry. This is the basic advantage as compared to COM where the version was stored in registry.