Предшественником платформы .NET была модель компонентных объектов COM (Component Object Model), появившаяся в 1992 году. Технология COM предназначена для упрощения создания сложных приложений и основывается на создании компонентов, которые могут быть написаны на разных языках программирования, помещены в динамические загружаемые библиотеки (DLL) и затем использованы в других приложениях. Недостатки COM:
- отсутствие полной совместимости компонентов, разработанных на разных языках программирования;
- требование совместимости на двоичном уровне ограничивает использование технологии COM операционными системами Windows;
- сложности в установке приложений и конфликты между старыми и новыми версиями компонентов;
- отсутствие контроля корректного освобождения оперативной памяти при выполнении приложения ("утечка памяти");
- невозможность в полной мере использовать несколько языков программирования при разработке сложных приложений.
Преимущества .NET:
- полные возможности взаимодействия с существующим кодом;
- полноценное использование несколько языков программирования при разработке сложных приложений;
- общая среда выполнения для всех приложений вне зависимости от языка программирования, на котором разработано приложение;
- библиотека базовых классов, которая обеспечивает сокрытие всех сложностей, связанных с непосредственным использованием вызовов большинства прикладных API;
- упрощение установки приложений методом копирования файлов и отсутствие конфликтов между старыми и новыми версиями компонентов.
Первая версия .NET Framework 1.0 появилась в 2001 году. В 2003 году вышла следующая версия .NET Framework 2.0. В конце 2006 года появилась версия .NET Framework 3.0, являющейся неотъемлемой частью операционной системы Windows Vista.
Модули DLL или EXE, скомпилированные для платформы .NET, называются сборками (assembly). Внутри сборок находится программный код на языке IL (Microsoft Intermediate Language). Программный код на языке IL является не зависящим от аппаратно-программной платформы, что позволяет создавать кросс-платформенные приложения. Кроме того, компиляция исходных текстов приложений, написанных на любом языке программирования, в код IL является основой совместимости компонентов, написанных на разных языках программирования.
Помимо инструкций IL, сборки содержат также метаданные, которые подробно описывают типы, определенные в сборке, и саму сборку (эта часть метаданных называется манифестом). В манифесте содержится информация о текущей версии сборки, об использованных ограничениях по безопасности, о поддерживаемом естественном языке (английском, русском и т. д.), а также список всех внешних сборок, которые потребуются для нормального выполнения.
Поскольку в сборках содержится платформенно-независимый код на языке IL, а выполняются в конечном итоге платформенно-зависимые инструкции, необходимо использование компиляции времени выполнения (just-in-time compiler, JIT). Откомпилированные из IL платформенно-зависимые инструкции JIT помещает в кэш-память, что ускоряет работу приложения.
.NET Framework состоит из двух частей - среды выполнения CLR (Common Language Runtime) и библиотеки базовых классов BCL (Base Class Library). Ядро среды выполнения реализовано в виде библиотеки "C:\Windows\system32\mscoree.dll". При обращении к приложению .NET mscoree.dll автоматически загружается в память, и, в свою очередь, эта библиотека управляет процессом загрузки в память сборки данного приложения. Ядро среды выполнения ответственно за множество задач. Оно занимается поиском физического местонахождения сборки, обнаружением внутри сборки запрошенного типа (класса, интерфейса, структуры и т. п.) на основе информации метаданных, компилирует IL в платформенно-зависимые инструкции, выполняет проверки, связанные с обеспечением безопасности и т.д.
Библиотека базовых классов разбита на множество отдельных сборок, однако главная сборка представлена файлом "C:\Windows\Microsoft.NET\Framework\версия\mscorlib.dll". В библиотеке базовых классов содержится огромное количество типов для решения распространенных задач при создании приложения. Приложение .NET будет обязательно использовать сборку mscorlib.dll и по мере необходимости — другие сборки.
Стандартная система типов (Common Type System, CTS) — это формальная спецификация, которая определяет, как какой-либо тип (класс, структура, интерфейс, встроенный тип данных и т. п.) должен быть определен для его правильного восприятия средой выполнения .NET. CTS определяет синтаксические конструкции, которые могут поддерживаться, а могут и не поддерживаться конкретным языком программирования .NET. Если необходимо создавать сборки, которые смогут использоваться всеми языками программирования .NET, следует при создании типов следовать общеязыковым правилам (Common Language Specification, CLS). Необходимо понимать, что CLS - это лишь часть тех возможностей, которые определены в CTS, и поддерживаемая всеми языками программирования на платформе .NET.