Components and Assemblies
Components are packaged in assemblies. Assemblies are the reusable, versionable, self-describing building blocks of .NET applications. The simplest assembly is a single executable that contains all the information necessary for deployment and versioning.
The metadata describing an assembly is called the manifest. In the most general case, an assembly can consist of a number of executable files and resource files. In that case, the manifest may be a separate file, or it may be included in one of the executable files. Assemblies enable the common language runtime to locate and securely execute code. In particular, the runtime uses assemblies for the following purposes:
- Establishing security and version identity for code.
- Providing a scope for class and type resolution.
- Locating classes to load.
Assemblies and Versioning
One of the primary goals of assemblies is versioning. Specifically, assemblies provide a means for developers to specify version rules between different software components, and to have those rules enforced at run time.
Because assemblies are the building blocks of applications, they are the logical point for specifying and enforcing version information. Each assembly has a specific version number as part of its identity.
The version number is stored in the assembly's manifest along with other identity information, including the friendly name and supported locales. The fact that a version number is part of an assembly's identity is the key to versioning: AssemblyA, version 1 and AssemblyA, version 2 are two completely different entities, and are treated as such at run time.
For more general information on assemblies, see Assemblies in the .NET Framework documentation.