In simple words, an assembly is smallest deployable unit in .net framework. We can define an assembly is a compiled code library use for deployment, versioning and security. There are two types: process assemblies (EXE) and library assemblies (DLL). A process assembly represents a process which will use classes defined in library assemblies .NET assemblies contain code in CIL, which is usually generated from a CLI language, and then compiled into machine language at runtime by the CLR just-in-time compiler.
On the basis of execution an assembly is of two types
1. .exe -- Which is known as self executable assembly.
2. .dll -- Which is known as dynamic link library.
3. .netmodule – This is other types of assembly which is used to create modules of different-2 language which can be further added in main program. Example of such type application is that suppose we want to create a module through VB.NET and another module is created in VC#.NET then finally we can merge these two module in main program which have a main method. That program either VB.NET or VC#.NET. In this process we use concept of .netmodule.
On the basis of accessing an assembly is of two types
1. Private assembly -- When we reference private assembly to any application then that application creates a separate copy of that assembly.
2. Shared assembly – Shared assembly are deployed in GAC (Global Assembly Cache) folder and application do not make separate copy of these assembly.
On the basis of file assembly is of two types
1. Single File Assembly
2. Multi File Assembly.
With Respect to Number of Resources an assembly of two types
1. Static Assembly -- It uses fixed resources
2. Dynamic Assembly – It support dynamic creation of resources or files at runtime programmatically.