Assemblies are the construct used by the NGWS runtime to locate and load types and resources. Just as type metadata removes the need to look in the Registry for the description of a type, the assembly metadata removes the need to look in the Registry to locate the type.
The assembly metadata combined with type metadata provides all the information the NGWS runtime needs to find and load types. Each time a type is loaded, the manifest for the assembly containing the type is loaded as well (unless it was loaded before, of course). The manifest is then used to resolve all references to types made from within the assembly. References to types will always resolve to one of two places: the same assembly as the caller, or in a dependent assembly. In both cases, the manifest provides the information needed for the NGWS runtime to resolve the reference.
Because the NGWS runtime class loader relies on the manifest, the assembly establishes a resolution scope for types. In classic-COM, the resolution scope was the registry in that a caller could activate any type that was visible in the Registry. In contrast, the NGWS runtime uses the assembly to scope the set of types that can be referenced at runtime. The target type must either be in the same assembly as the caller or in dependent assembly. As mentioned, information about all dependencies, including the version of the dependency the assembly was built against, are fully described in the manifest.