It provides a number of services, including the following:
- Code management loading and execution
- Application memory isolation
- Verification of type safety
- Conversion of IL to native code
- Access to metadata
- Managing memory for managed objects
- Enforcement of code access security
- Exception handling, including cross-language exceptions
- Interoperation between managed code, COM objects, and pre-existing DLLs like unmanaged code and data
- Automation of object layout
- Support for developer services like profiling, debugging