Le .NET Framework est un framework pouvant être utilisé par un système d'exploitation Microsoft Windows et Microsoft Windows Mobile depuis la version 5 (.NET Compact Framework). Une version légère et limitée fournie avec un moteur d'exécution fonctionnant à l'intérieur d'un navigateur ou d'un périphérique mobile est disponible sous le nom de Silverlight. La version 3.0 du framework est intégrée à Windows Vista et à la plupart des versions de Windows Server 2008 ou téléchargeable depuis le site de l'éditeur Microsoft.
Le framework .NET s'appuie sur la norme Common Language Infrastructure (CLI) qui est indépendante du langage de programmation utilisé. Ainsi tous les langages compatibles respectant la norme CLI ont accès à toutes les bibliothèques installées (installables) dans l'environnement d'exécution. Le framework .NET est un sous ensemble de la technologie Microsoft .NET.
Il a pour but de faciliter la tâche des développeurs en proposant une approche unifiée à la conception d'applications Windows ou Web, tout en introduisant des facilités pour le développement, le déploiement et la maintenance d'applications. Il n'a pas besoin d'être installé sur la machine d'un utilisateur final.
Le framework gère tous les aspects de l'exécution d'une application dans un environnement d'exécution dit « managé » :
Il est composé de deux blocs principaux :
L'unité de base d'une application .NET est appelée un assemblage (assembly). Il s'agit d'un ensemble de code, de ressources et de métadonnées. Un assemblage est toujours accompagné par un manifeste (assembly manifest) qui décrit ce qu'il contient : nom, version, types de données exposées, autres assemblages utilisés, instructions de sécurité. Un assemblage est composé d'un ou plusieurs modules qui contiennent le code.
Tout comme en Java, quand une application .NET est compilée, elle n'est pas compilée en code binaire machine, mais dans un code binaire intermédiaire CIL. Une application consiste donc en un ensemble d'assemblages contenus dans un ou plusieurs fichiers exécutables ou fichiers DLL en Common Intermediate Language (CIL). Au moins un de ces assemblages doit contenir un point d'entrée afin de démarrer l'application.
Quand l'exécution d'un programme démarre, le premier assemblage est chargé en mémoire. Le CLR commence par examiner les permissions demandées par cet assemblage et les compare à la politique de sécurité (security policy) du système. Puis, si l'assemblage est autorisé à s'exécuter, un processus est créé pour exécuter l'application. Le premier morceau de code nécessaire à l'exécution est chargé en mémoire et est compilé en code binaire natif par le compilateur juste à temps (Just-In-Time, JIT). Une fois compilé, le code est exécuté et stocké en mémoire sous forme de code natif, garantissant ainsi que chaque portion de code n'est compilée qu'une seule fois lors de l'exécution de l'application.