Understanding the Microsoft .NET Framework
Between the Microsoft .NET Framework and Microsoft Visual Studio .NET (the tool that helps developers build .NET applications), developers have never had so much exciting power at their fingertips. But with this exciting developer technology comes the daunting task of providing a solid, secure platform on which to deploy these new applications. Before you can build and administer such a platform, you must understand the key features of the .NET Frameworkthe Common Language Runtime (CLR) and the .NET Framework class libraryand the implications of installing the .NET Framework in your production environment.
What's the .NET Framework?
The Microsoft marketing machine spent more than 2 years trying to explain to the technology masses just what .NET is. I've found that the objectives the .NET Framework attempts to accomplish best describe it. As the .NET Framework software development kit (SDK) documentation states, the .NET Framework is designed to fulfill these objectives:
- Provide a consistent, object-oriented programming environment whether object code is stored and executed locally, executed locally but Internet-distributed, or executed remotely.
- Provide a code-execution environment that minimizes software deployment and versioning conflicts.
- Provide a code-execution environment that guarantees safe execution of code, including code created by an unknown or semitrusted third party.
- Provide a code-execution environment that eliminates the performance problems of scripted or interpreted environments.
- Make the developer experience consistent across widely varying types of applications, such as Windows-based applications and Web-based applications.
- Build all communication on industry standards to ensure that code based on the .NET Framework can integrate with any other code.
The .NET Framework has two main components: the CLR and the .NET Framework class library.
The CLR
The CLR, which is the foundation of the .NET Framework, is a negotiator that manages code at execution time. The CLR provides core services, such as
- memory managementThe CLR's garbage collector automatically manages the allocation and release of memory for an application. This management is a big win for IIS administrators who have suffered Web server crashes and subsequent memory leaks because of developer mistakes.
- thread managementThreads are the basic unit to which the OS allocates CPU time. The OS uses processes to separate the different applications that it executes, and more than one thread can be executing code within those processes.
- remotingRemoting enables different applications to communicate with one another.
- enforcement of strict type safetyType-safe code is code that accesses types (e.g., memory) in well-defined, structural ways and has strict rules that help prevent mistakes.
The concept of code management is a fundamental principle of the CLR, and applications that the CLR manages are called managed applications. Applications such as Active Server Pages (ASP) applications that aren't targeted to the CLR (i.e., aren't written on the .NET Framework) are called unmanaged applications. Managed applications benefit from features such as cross-language integration, cross-language exception handling, enhanced security, versioning and deployment support, a simplified model for component interaction, and debugging and profiling services.
When you compile a managed application, a .NET language compiler translates your source code into Microsoft intermediate language (MSIL) code. You can write the source code in any .NET-compliant languagethat is, a language for which a .NET language compiler exists. Currently, compilers exist for the languages of Visual Basic .NET, JScript .NET, C#, and managed C++.
MSIL code is a CPU-independent set of instructions. Before the MSIL code can execute, the CLR must convert it to CPU-specific code, usually with a just-in-time (JIT) compiler. JIT compilation takes into account that the runtime engine might never call some code during execution. Therefore, rather than using processing time and memory to convert all the MSIL code to native (i.e., CPU-specific) code at one time, the JIT compiler converts the MSIL code on an as-needed basis during execution. The compiler stores the resulting native code so that it's accessible for subsequent calls. Because the CLR supplies JIT compilers for each computer architecture that the CLR supports, the same MSIL code can be JIT-compiled and executed on any supported architecture.
The .NET Framework Class Library
The class library, the second main component of the .NET Framework, is a comprehensive, object-oriented collection of reusable data types that developers use to write .NET applications. You can parallel the class library to the Win32 API set, which historically developers have used to leverage resources such as OS functionality. The .NET Framework includes classes, interfaces, and value types that optimize the software-development process by making it easier to build powerful software. The class library, like the Win32 API set, provides access to system functionality such as editing the IIS metabase and stopping the Web server.