These implementations are stored as MSIL, which is machine-independent code that describes the instructions of a program. A program can search for new types at runtime, then instantiate and invoke methods on those types. Security Security considerations permeate the design of the .NET Framework. Key to making this possible is CLR's ability to analyze MSIL instructions as being safe or unsafe. An assembly is a completely self-describing package that contains all the metadata and MSIL of a program.
Deployment can be as easy as copying the assembly to the client computer.
Versioning An assembly can function properly with new versions of assemblies it depends on without recompilation. Key to making this possible is the ability to resolve all type references though metadata. The CLR provides many features that greatly simplify development, including services such as garbage collection, exception handling, debugging, and profiling. The CLR provides interoperation with the vast base of existing software written in COM and C. .NET types can be exposed as COM types, and COM types can be imported as .NET types. In addition, the CLR provides PInvoke, which is a mechanism that enables C functions, structs, and callbacks to be easily used from within in a .NET program.