Packaging Building Blocks
In addition to the common language runtime, .NET Framework also provides the .NET Framework class library, which is organized into a hierarchical tree of namespaces. At the root is the System namespace, which contains objects for many other useful classes — including those for file I/O, messaging, networking, and security — that can be used from any .NET-compatible language.
Any .NET Framework class libraries that you and others create are also organized into hierarchical namespaces and are stored in portable executable (PE) files — typically DLLs and EXEs. You can have several namespaces — including nested namespaces — in one PE file, and you can split a namespace across multiple PE files. One or more PE files (and possibly other files, such as resources) are combined together to create an assembly, which is a physical unit that can be deployed, version numbered, and re-used.
In the .NET Framework, each class type is fully described through the type's metadata. Each assembly contains a manifest that includes the name of each type exported from the assembly along with information about which file contains its metadata. The manifest also includes information about the assembly's identity (name, files that make up the assembly, and version information) and full information about any dependencies on other assemblies. The runtime uses assembly manifests to locate and bind to the referenced types. The process of locating and binding to assemblies is handled by the common language runtime.
See Also
Packaging and Deployment | Packaging and Distribution | (1) Hello World | (2) A Simple Componentized Application | (3) Path for Private Components | (4) A Shared Component | (5) Component Versioning | Packaging and Deployment Summary | Appendix A: Additional Packaging and Deployment Information | Appendix B: Packaging and Deployment Tools