Building Blocks of .NET Framework, which forms the fundamental unit of deployment, version control, reuse, activation scoping, and security permissions. Assemblies are the collection of types and resources which are built to work together to form a logical unit of Functionality (dll or .exe). They provide the information needed to Common Language Run-time (CLR) to make it aware of type of implementation.
Compared to Executable files (.exe’s), Assemblies are secure, reliable and easy to manage. An Assembly contains set of modules and classes complied in Microsoft Intermediate Language (MSIL) and metadata (describes assembly and functionality of assembly classes) code which is complied and run by CLR.
Thus, the four components of an assembly are:
- Assembly manifest
- MSIL source code
- Type metadata
Each Assembly has one Entry point – DllMain, WinMain, or Main and its forms the security boundary. Permissions are requested or granted to the Assembly unit.
It forms a security boundary. An assembly is the unit at which permissions are requested and granted.
It forms a type boundary. Every type’s identity includes the name of the assembly in which it resides. A type called MyType loaded in the scope of one assembly is not the same as a type called MyType loaded in the scope of another assembly.
It forms a reference scope boundary. The assembly’s manifest contains assembly metadata that is used for resolving types and satisfying resource requests. It specifies the types and resources that are exposed outside the assembly. The manifest also enumerates other assemblies on which it depends.
It forms a version boundary. The assembly is the smallest versionable unit in the common language runtime; all types and resources in the same assembly are versioned as a unit. The assembly’s manifest describes the version dependencies you specify for any dependent assemblies.
It forms a deployment unit. When an application starts, only the assemblies that the application initially calls must be present. Other assemblies, such as localization resources or assemblies containing utility classes, can be retrieved on demand. This allows applications to be kept simple and thin when first downloaded.
It is the unit at which side-by-side execution is supported.
Assemblies can be static or dynamic. Static assemblies can include .NET Framework types (interfaces and classes), as well as resources for the assembly (bitmaps, JPEG files, resource files, and so on). Static assemblies are stored on disk in PE files. You can also use the .NET Framework to create dynamic assemblies, which are run directly from memory and are not saved to disk before execution. You can save dynamic assemblies to disk after they have executed.
There are several ways to create assemblies. You can use development tools, such as Visual Studio .NET, that you have used in the past to create .dll or .exe files. You can use tools provided in the .NET Framework SDK to create assemblies with modules created in other development environments. You can also use common language runtime APIs, such as Reflection.Emit, to create dynamic assemblies.