Microsoft officially defined .NET Framework as follows:
The .NET Framework is the heart of Microsoft .NET. The .NET Framework is a software development platform of Microsoft .NET. Like any platform, it provides a runtime, defines functionality in some libraries, and supports a set of programming languages. The .NET Framework provides the necessary compile-time and run-time foundation to build and run .NET-based applications.
The .NET Framework consists of:
• Common Language Runtime
• Class Libraries
• Support for Multiple Programming Language
The common language runtime (CLR) (also refer as runtime). The Common Language
Runtime is the core of Microsoft's .NET vision. This is said to be the execution engine of .NET platform. The runtime (CLR) handles runtime services, including language integration, security, and memory management. During development, the runtime (CLR) provides features that are needed to simplify development.
Class libraries: Class libraries provide reusable code for most common tasks, including data access, XML Web service development, and Web and Windows Forms. The CLR Software Development Kit (SDK) provides the programming APIs in the form of a set of classes for building .NET applications. Collectively, they are referred to the Base Class Library, or BCL.
Through the classes in the BCL, we can interact with the runtime, influencing the way that the runtime's services are provided to us. In addition to giving us an "in" to the runtime, the BCL classes provide a large number of useful utilities. These include things like a new database access library (ADO.NET), ASP.NET, and an XML parser with support for the latest XML specifications. In addition, developers can extend classes by creating their own libraries of classes. All applications (Web, Windows, and XML Web services) access the same .NET Framework class libraries, which are held in namespaces.
Support for multiple programming languages. Having a set of libraries and a runtime is good, but neither one of them is useful if you can't write programs to take advantage of them. In order to do that, you need to use some programming language with a compiler that is runtime-aware. Microsoft currently lists over twenty different languages with which it will be possible to write software that targets the CLR. Microsoft itself ship support for five languages with the SDK: C#, Visual Basic.NET, IL, C++, and JScript.NET. Of these, C# and Visual Basic.NET are likely to be the languages most often used to develop software for this new platform. Any language that conforms to the Common Language Specification (CLS) can run with the common language runtime. Relying on the common language runtime, code compiled with compilers of .NET based languages can interoperate. All .NET-based languages also access the same libraries.
Features of .NET Framework
• It is a platform neutral framework.
• It is a layer between the operating system and the programming language.
• It supports many programming languages, including VB.NET, C# etc.
• .NET provides a common set of class libraries, which can be accessed from any .NET based programming language. There will not be separate set of classes and libraries for each language. If you know anyone .NET language, you can write code in any .NET language.
• In future versions of Windows, .NET will be freely distributed as part of operating system and users will never have to install .NET separately.
Application Development and Execution
Since Microsoft .NET is a Multilanguage platform then any.NET based language can be chosen to develop applications. Comfort ability of application programmers, specific requirement of applications may be the major factors in selection of language.
Choosing a Compiler
According to the language we can choose its run time aware compiler for .NET platform. Because it is a Multilanguage execution environment, the runtime supports a wide variety of data types and language features.
Compiling to MSIL
When compiling your source code, the compiler translates it into an intermediate code represented in Microsoft intermediate language (MSIL). Before code Can be run, MSIL code must be converted to CPU-specific code, usually by a just-in-time (JIT) compiler. When a compiler produces MSIL, it also produces metadata. Metadata includes following information.
• Description of the types in your code, including the definition of each type,
• The signatures of each type's members,
• The members that your code references,
• Other data that the runtime uses at execution time.
The MSIL and metadata are contained in a portable executable (PE) file that is based on and extends the published Microsoft PE and common object file format (COFF) used historically for executable content. This file format, which accommodates MSIL or native code as well as metadata, enables the operating system to recognize common language runtime images.
The presence of metadata in the file along with the MSIL enables your code to describe itself. This composite file serves as a self describing unit to the .NET Framework Runtime is called Assembly. The runtime locates and extracts the metadata from the file as needed during execution.
JIT Compilation to Native code:
The MSIL code is compiled into native code by component of CLR named JIT Compiler.
JIT compiler intelligently guesses and compiles the intermediate code on piece by piece basis. This piece may be a method or a set of methods. Before a method can be run, it must be compiled to processor-specific code. Each method for which Microsoft intermediate language (MSIL) has been generated is just-in-time-compiled (JIT-compiled) when it is called for the first time, and then run. The next time the method is run, the existing JIT -compiled native code is run. The process of JIT -compiling and then executing the code is repeated until execution is complete.
Type Safety Checking
As part of compiling MSIL to native code, code must pass a verification process unless an administrator has established a security policy that allows code to bypass verification. Verification examines MSIL and metadata to find out whether the code is type safe, which means that it only accesses the memory locations it is authorized to access. Additionally, verification inspects code to determine whether the MSIL has been correctly generated, because incorrect MSIL can lead to a violation of the type safety rules .
The runtime relies on the fact that the following statements are true for code that is verifiably type safe:
• A reference to a type is strictly compatible with the type being referenced.
• Only appropriately defined operations are invoked on an object.
• Identities are what they claim to be.
If type-safe code is required by security policy and the code does not pass verification, an exception is thrown when the code is run.
Code execution under CLR
The common language runtime is responsible for providing following low-level execution services, such as garbage collection, exception handling, security services, and runtime type safety checking. Because of the common language runtime's role in managing execution, programs that target the .NET Framework are sometimes called "managed" applications.