Das .Net-Framework (Eigenschreibweise: .NET Framework) ist ein Teil von Microsofts Software-Plattform .NET und erfüllt als solcher seine Funktion bei der Entwicklung und Ausführung von Programmen, die das Framework einbinden und verwenden. Das Framework von .NET bietet sowohl eine Laufzeitumgebung für die Ausführung als auch eine Programmbibliothek für die Entwicklung von Programmen. Für den Endanwender ist das .Net-Framework eine Middleware, ohne die Software und Anwendungen, die das .Net-Framework benutzen, nicht lauffähig sind.
Seit Windows Vista wird das .Net-Framework zusammen mit dem Betriebssystem installiert. Seit seiner Einführung wird das Framework über Windows Update von Microsoft gepflegt.
Das Framework vereinheitlichte und modernisierte die Methodik der Anwendungsentwicklung für das Microsoft-Betriebssystem, für das es bis zur Einführung von .NET Core exklusiv zur Verfügung stand. Es besteht aus Schnittstellen für das Betriebssystem und Programmbibliotheken, unter anderem für Dateizugriffe, Netzwerkkommunikation, Datenbankzugriffe, Grafik und grafische Benutzeroberflächen, aber auch für immer wieder verwendete Programmteile, wie zum Beispiel die für Passwörter wichtigen Hashfunktionen, Zeit- und Datumsberechnung sowie -konvertierung oder Funktionen aus der alltäglichen Mathematik. Auch komplexere Programmabläufe wie die gleichzeitige Ausführung von Programmteilen zur besseren Nutzung von heute handelsüblichen Mehrkernprozessoren können mit dem Framework einfacher und weniger fehleranfällig realisiert werden.
.NET-Anwendungen waren bis zur Einführung von .NET 8 keine selbstständig lauffähigen Programme, da sie nicht direkt in Maschinensprache übersetzt werden, die von einem Prozessor nativ ausgeführt werden könnte. Aus diesem Grund wird das .Net-Framework für ihre Ausführung benötigt. Im November 2020 wurden .NET Core, .NET Standard und .Net-Framework für die weitere Entwicklung als einheitliche Plattform unter der Bezeichnung NET 5.0 zusammengeführt. Unter .Net-Framework 4 erstellte Programme sollen aber dauerhaft auf den Betriebssystemversionen Windows 7 / 8 / 10 / 11 lauffähig bleiben.
Entstehungsgeschichte Die Entwicklung der .NET-Plattform wurde als notwendig angesehen, um die in die Jahre gekommenen Konzepte von Windows durch neue zu ersetzen, war jedoch auch das Ergebnis des Rechtsstreits von Microsoft mit Sun über Java. Microsoft hatte das von Sun entwickelte Java-System adaptiert und es nach eigenen Bedürfnissen erweitert, was die Plattformunabhängigkeit von Java-Applikationen beeinträchtigte. Als Sun das unter anderem durch Gerichtsverfügung unterband, änderte Microsoft seine Strategie. Zudem war es Microsoft bis zur Entwicklung von .NET nicht gelungen, im lukrativen Markt für mobile Kleingeräte Fuß zu fassen.
Zudem hatten sich mit der Zeit verschiedene, zueinander inkompatible Softwaresysteme für Windows entwickelt. Die drei für Windows meistverwendeten Programmiersprachen C++, Visual Basic sowie die Microsoft-Implementierung einer Java-Syntax, J++, waren zueinander nicht kompatibel und die Zusammenarbeit über verschiedene Brücken erwies sich als sehr kompliziert.
Zeichenketten und ANSI/Unicode Die Datentypen für Zeichenketten (engl. „strings“) waren nicht binärkompatibel zueinander. Wollte man solche über zwei Softwaresysteme hinweg schreiben, so musste man Laufzeiteinbußen wegen Konvertierungsfunktionen hinnehmen. Verschärfend kam die Koexistenz von ANSI und Unicode hinzu. Viele Programme unterstützten kein Unicode oder wurden dafür noch nicht ausgerüstet. .NET verwendet einheitlich Unicode für Zeichenketten.
Speicherverwaltung Jede Entwicklungsplattform besaß ein eigenes System für die Verwaltung des Speichers. J++ und Visual Basic besaßen eine automatische Speicherverwaltung; das heißt, der Programmierer überließ (weitgehend) dem System die Verwaltung des Speichers. Visual C++ hingegen besaß keine Speicherverwaltung, der Programmierer musste sich selbst darum kümmern.
Offenlegung des Quellcodes Am 17. Januar 2008 veröffentlichte Microsoft den Quelltext des Frameworks unter der restriktiven Microsoft Reference License. Zu diesem Schritt entschloss sich Microsoft bereits im Oktober 2007, als Sun Microsystems sein Produkt Java unter der GNU GPL mit eigenen Zusatzklauseln zur Verfügung stellte.
Ende 2013 gründeten Microsoft, Xamarin (Mono) und andere die .NET Foundation als neuer Rechteinhaber und Lizenzgeber des .Net-Frameworks. Seitdem sind fast alle Rechte an der .NET-Klassenbibliothek von Microsoft an die .NET Foundation übertragen worden. Unter dem Dach der .NET Foundation werden mit Stand 2014 30 Projekte verwaltet.
Verhältnis zu Mono Teile der Open-Source-Community sahen in der Offenlegung unter der damaligen restriktiven Lizenz eine Gefahr für das Projekt Mono, welches .NET-Anwendungen unter Linux teilweise verfügbar macht. Microsoft hatte 2007 noch behauptet, das Projekt enthalte Quellcode aus dem .NET-Framework. Da das Framework und Mono gleichermaßen .NET implementieren, befürchtet man nun zwangsweise starke Ähnlichkeiten im Quellcode.
Das umstrittene Patentabkommen zwischen Microsoft und NovellWas die Kunden wollen: Microsoft und Novell kooperieren – Artikel bei Heise open, vom 3. November 2006 (dem ehemaligen Projektträger von Mono) schützt derzeit sowohl die Community unter Novell als auch Microsoft vor gegenseitigen Patentansprüchen.
Mit der Gründung der .NET Foundation und der Übertragung der Rechte und Quellcodes an die Foundation arbeitet Microsoft mit Xamarin (Mono) aktiv zusammen, um .NET auf unterschiedlichen Plattformen bereitzustellen. Durch die Offenlegung der Quellcodes unter der MIT-Lizenz bzw. Apache 2.0 Lizenz ist der Quellcode des .NET-Frameworks nahezu beliebig – sprich auch in Closed-Source-Projekten – verwendbar. Lizenz- und patentrechtliche Auseinandersetzungen sind somit kaum noch möglich und somit auch nicht mehr zu befürchten.
Chronik der .NET-Framework-Entwicklung Jahr Ereignisse 2000 Juni – Bill Gates stellt erstmals die .NET-Vision vor. Juli – Auf der Entwicklerkonferenz Professional Developers Conference (PDC) gibt es erstmals CDs mit lauffähigen Vorabversionen des Frameworks und von Visual Studio .NET Oktober – C# und die CLI (siehe unten) werden (von MS, HP und Intel) bei der europäischen Standardisierungsorganisation European Computer Manufacturers Association (ECMA) eingereicht, was für Microsoft einen ungewöhnlichen Schritt der Öffnung darstellt. 2002 Januar – .NET (V1.0) wird offiziell mit der zugehörigen Entwicklungsumgebung SDK (und Visual Studio .NET 2002) vorgestellt. Verwirrung: Im Zuge des Marketings wird nach Microsofts Gewohnheit versucht, alle anstehenden Neuentwicklungen unter einen, den .NET-Begriff, zu fassen, wodurch selbst Fachleute einschließlich Microsoft-Mitarbeiter nicht mehr verstehen, worum es eigentlich geht. Die Programmiertechnik und Entwicklungsumgebung wird zunächst in Verbindung gestellt zu konkreten Webdiensten, die Microsoft anbietet (Codename Hailstorm wird zu .Net My Services) und später vom Marketing wieder von .NET entkoppelt. Auch die nächste Betriebssystem-Generation von Windows wird als Bestandteil von .NET angekündigt. 2003 Vorstellung von .NET 1.1 und Visual Studio 2003 mit im Wesentlichen geringfügigen Verbesserungen und Erweiterungen. 2005 Betaversionen von .NET 2.0 und Visual Studio 2005 erhältlich 7. November: Visual Studio 2005 und .Net-Framework 2.0. werden in den USA veröffentlicht. 19. Dezember: Deutsche Version des .Net-Framework 2.0 verfügbar 2006 6. Februar: Visual Studio 2005 wird in deutscher Sprache veröffentlicht. 6. November: .NET Framework 3.0 verfügbar 2007 Erste Berichte um .NET 3.5 und dem neuen Visual Studio 2008 mit dem Codenamen „Orcas“ 19. November: .NET 3.5 und Visual Studio 2008 wird in den USA veröffentlicht. 2008 17. Januar: Das .Net-Framework wird zwecks „erleichtertem Debugging“ im Quelltext veröffentlicht. Februar: Visual Studio 2008, Microsoft SQL Server 2008 und Windows Server 2008 werden veröffentlicht. 2009 18. Mai: .NET 4.0 Beta 1 veröffentlicht 19. Oktober: .NET 4.0 Beta 2 veröffentlicht 2010 10. Februar: .NET 4.0 RC veröffentlicht. 12. April: .NET 4.0 sowie Visual Studio 2010 in finaler Version veröffentlicht 2012 31. Mai: .NET 4.5 RC veröffentlicht 15. August: .NET 4.5 (Final) veröffentlicht 2013 12. Oktober: .NET 4.5.1 (Final) veröffentlicht 2014 5. Mai: .NET 4.5.2 (Final) veröffentlicht 2015 20. Juli: .NET 4.6 (Final) veröffentlicht 17. November: .NET 4.6.1 (Final) veröffentlicht 2016 20. Juli: .NET 4.6.2 (Final) veröffentlicht 2017 5. April: .NET 4.7 als Bestandteil des Windows 10 Creators Update veröffentlicht 2. Mai: .NET 4.7 als eigenständige Installation veröffentlicht 17. Oktober .NET 4.7.1 veröffentlicht2018 30. April: .NET 4.7.2 veröffentlicht2019 18. April: .NET 4.8 veröffentlicht2022 9. August: .NET 4.8.1 veröffentlicht
Konzept und Bestandteile Die .NET-Plattform ist die Umsetzung des Common-Language-Infrastructure-Standards (CLI) und stellt mit diesem eine Basis zur Entwicklung und Ausführung von Programmen dar, die mit unterschiedlichen Programmiersprachen auf verschiedenen Plattformen erstellt wurden. Hauptbestandteile sind die (objektorientierte) Laufzeitumgebung Common Language Runtime (CLR), die Base Class Library (BCL) sowie diverse Hilfsprogramme zum Beispiel zur Rechteverwaltung.
Mit .NET löste Microsoft zuvor eingesetzte Softwareentwicklungskonzepte wie das Component Object Model ab, bis es COM in einer erweiterten Form unter dem Namen Windows Runtime reaktivierte. Seitdem plant Microsoft den parallelen Einsatz beider Frameworks für die Betriebssystemgeneration um Windows 8.
Common Language Runtime
Die Common Language Runtime (CLR) ist die Laufzeitumgebung des .Net-Framework und enthält den JIT-Compiler für den standardisierten Zwischencode, die Common Intermediate Language (CIL). Die CIL hieß früher Microsoft Intermediate Language (MSIL), wurde aber im Rahmen der Standardisierung durch die Ecma International umbenannt. Für sie wurde ein sprachübergreifendes System von objektbasierten Datentypen definiert, so dass für alle Hochsprachen, die sich an den Common Language Infrastructure-Standard (CLI) halten, gültiger CIL-Bytecode erstellt werden kann.
.NET wurde von Anfang an dafür entwickelt, dass Programmierer in unterschiedlichen Programmiersprachen arbeiten können. Jede dieser Hochsprachen wird von .NET dann in die CIL übersetzt.
Das Besondere an der CLR ist weniger die technische Innovation als vielmehr die strategische Entscheidung von Microsoft für ein laufzeitbasiertes System. Es soll unter anderem helfen, Systemabstürze zu vermindern, da die Runtime Applikationsfehler abfangen kann. Damit entschied sich Microsoft erstmals gegen die bisher angewandte direkte Kompilierung in den Maschinencode des Zielsystems. Zusammen mit der Marktmacht von Java und dem Erfolg von Skriptsprachen ist damit ein Trend zu identifizieren. Dieser stellt einen Bruch mit den direktkompilierenden Programmiersprachen (insbesondere C++ und C) dar.
Mittels Reflection ist es möglich, zur Laufzeit Programmcode über ein Objektmodell zu generieren und es direkt im Speicher in lauffähigen Code zu überführen.
Die .NET-Terminologie unterscheidet dabei zwischen Bytecode, welcher von der CLR verwaltet und in Maschinensprache umgesetzt wird („verwalteter Code“), und Teilen, die nicht innerhalb der CLR ausgeführt werden („nicht verwaltet“). Daneben gibt es noch die Möglichkeit in .NET sogenannten „unsicheren Code“ (oder „Code im unsicheren Kontext“) zu schreiben, um weiterhin z. B. klassische Zeiger-Operationen unmittelbar auf einem Speicherbereich durchführen zu können.Was ist „verwalteter Code“? – Microsoft Docs, erstveröffentlicht am 20. Juni 2016; u. a. auch mit „nicht verwalteten Code“ und „unsicheren Kontext“
Interop-Technik mini|hochkant=1.5|Interop-Technik