Попередником платформи .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.