The CLR provides several basic runtime services:
Class loading. A class loader loads the assembly into memory.
Assembly integrity check. In addition to IL codes, each .NET assembly  contains a manifest. The manifest contains a hash code of the assembly contents. A check is made to see if the assembly contents have been altered based on this hash code. The CLR refuses to run assemblies that have been altered. This is an additional layer of protection to prevent malicious and illegal alteration of assemblies after distribution.
 In short, a .NET assembly consists of individual software components placed together in a logical group. An assembly can consist of a single class or multiple classes. Assemblies ...