Die Common Language Runtime, kurz CLR, ist der Name der virtuellen Laufzeitumgebung von klassischen .Net-Framework-Anwendungen. Die CLR stellt damit eine konkrete Implementierung der Laufzeitumgebung der Common Language Infrastructure für das .NET Framework dar. Die CLR führt nicht direkt den Programmcode einer höheren Programmiersprache aus, sondern interpretiert Common Intermediate Language-Code (ECMA-Bezeichnung, früher Microsoft Intermediate Language). Dafür wird der Programmcode einer .NET Sprache (C#, J#, F#, C++/CLI …) mittels eines sprachabhängigen Compilers in CIL-Code übersetzt. Dies bietet unter anderem den Vorteil, dass Teile eines Programms in unterschiedlichen Programmiersprachen geschrieben werden können.
Wird ein Programm aus einer .NET-Programmiersprache übersetzt, werden zunächst Assemblies (Dateiendungen .exe oder .dll) erzeugt, welche den übersetzten CIL-Code sowie diverse Header und Metadaten enthalten. Dieser Schritt muss von einem sprachspezifischen Compiler vorgenommen werden. Bei CIL-Code handelt es sich um einen Zwischencode, der von der CLR verwaltet wird und der deshalb auch als managed code bezeichnet wird, als verwalteter Code – in Abgrenzung zu unmanaged code bzw. nativem Code. Zur Laufzeit des Programms werden die geladenen Assemblies von einem Just-in-time-Compiler, welcher Bestandteil der CLR ist, in nativen Code (Maschinencode) übersetzt, welcher von der CPU ausgeführt werden kann.
Die von der CLR angebotenen Dienste können von den Programmiersprachen genutzt werden, in denen die jeweilige Anwendung programmiert wurde. Zu diesen Diensten gehören unter anderem Garbage Collection, Ausnahmebehandlung und die Sicherstellung von Code Access Security. Die CLR ist angewiesen auf das Common Type System, d. h. eine Sammlung von Typen und Funktionen, die in vielen Programmiersprachen unterstützt werden.
Die CLR ist die Implementierung der Komponente Virtual Execution System, die zu dem Standard Common Language Infrastructure gehört, für das .NET Framework.[1]
Es gibt weitere Laufzeitumgebungen, die die CLR adaptieren und diesen Namen mitverwenden: