# .NET (Plattform)

.NET, bis 2020 .NET Core, ist eine freie und quelloffene Software-Plattform innerhalb des .NET-Systems, die zur Entwicklung und Ausführung von Anwendungsprogrammen dient und unter der Koordination von Microsoft entwickelt wird.
.NET Core wurde mehrere Jahre als Modernisierungsprojekt von zentralen Komponenten des .NET-Frameworks parallel zu diesem entwickelt und bildet jetzt als .NET den Nachfolger des bisherigen monolithischen .NET-Frameworks.
Klassenbibliotheken können kompatibel zum bisherigen .NET-Framework entwickelt werden, indem als Zielframework .NET Standard 2.0 verwendet wird.

## Geschichte

Versionsgeschichte :
| Version | Letzte Release | End of Life |
| Ältere Version; nicht mehr unterstützt: 1.0 (27. Juni 2016) | Ältere Version; nicht mehr unterstützt: 1.0.16 (14. Mai 2019) | 27. Juni 2019 |
| Ältere Version; nicht mehr unterstützt: 1.1 (17. November 2016) | Ältere Version; nicht mehr unterstützt: 1.1.13 (14. Mai 2019) | 27. Juni 2019 |
| Ältere Version; nicht mehr unterstützt: 2.0 (14. August 2017) | Ältere Version; nicht mehr unterstützt: 2.0.9 (10. Juli 2018) | 1. Okt. 2018 |
| Ältere Version; nicht mehr unterstützt: 2.1 (30. Mai 2018) | Ältere Version; nicht mehr unterstützt: 2.1.30 (19. August 2021) | 21. Aug. 2021 |
| Ältere Version; nicht mehr unterstützt: 2.2 (4. Dezember 2018) | Ältere Version; nicht mehr unterstützt: 2.2.8 (19. November 2019) | 12. Mai 2026 |
| Ältere Version; nicht mehr unterstützt: 3.0 (23. September 2019) | Ältere Version; nicht mehr unterstützt: 3.0.3 (18. Februar 2020) | 3. März 2020 |
| Ältere Version; nicht mehr unterstützt: 3.1 (3. Dezember 2019) | Ältere Version; nicht mehr unterstützt: 3.1.32 (13. Dezember 2022) | 23. Dez. 2019 |
| Ältere Version; nicht mehr unterstützt: 5.0 (10. November 2020) | Ältere Version; nicht mehr unterstützt: 5.0.17 (10. Mai 2022) | 10. Mai 2022 |
| Ältere Version; nicht mehr unterstützt: 6.0 (8. November 2021) | Ältere Version; nicht mehr unterstützt: 6.0.36 (12. November 2024) | 12. Nov. 2024 |
| Ältere Version; nicht mehr unterstützt: 7.0 (8. November 2022) | Ältere Version; nicht mehr unterstützt: 7.0.20 (28. Mai 2024) | 14. Mai 2024 |
| Ältere Version; noch unterstützt: 8.0 (14. November 2023) | Aktuelle Version: 8.0.14 (11. März 2025) | 10. Nov. 2026 |
| Ältere Version; noch unterstützt: 9.0 (14. November 2024) | Aktuelle Version: 9.0.3 (11. März 2025) | 12. Mai 2026 |
.NET Core wurde erstmals im Mai 2014 angekündigt, und zwar unter dem Namen Cloud-optimized .NET Framework. Es folgten die Alpha- und Beta-Variante, bis im November 2015 der erste Release Candidate erschien, womit Anwendungen für den Produktivbetrieb entwickelt werden dürfen. Dieser Release Candidate erhielt den Namen .NET Core 5, wobei die 5 die Fortsetzung der Versionsnummerierung des .NET-Frameworks bedeutet. Im Januar 2016 wurde von Seiten Microsofts allerdings angekündigt, diese Nummerierung dahingehend zu ändern, dass .NET Core in seiner ersten Version beginnend mit 1 nummeriert wird. Am 27. Juni 2016 wurde die Version 1.0 veröffentlicht. Die erste offizielle Version der Softwareentwicklungswerkzeuge erschien am 7. März 2017. Am 14. August 2017 erschien die Version 2.0 mit umfangreichen Ergänzungen der APIs zur Angleichung an das bisherige .NET-Framework bzw. den festgelegten .NET Standard 2.0. Die am 30. Mai 2018 erschienene Version 2.1 enthielt Unterstützung für weitere Architekturen, zusätzliche Anweisungen im SDK und Performance-Verbesserungen. Diese Version wurde auch zur LTS-Version erklärt, die dann bis zum 21. August 2021 unterstützt wurde.
Am 23. September 2019 erschien die Version 3.0 mit umfangreichen Verbesserungen wie der Verwendung der neuen C#-Version 8.0, F# 4.7, der Unterstützung von Desktop-Oberflächen in Form von Zusatzpaketen und Performance-Verbesserungen und AOT-Kompilierung. Zusätzliche Möglichkeiten gab es auch beim auf .NET Core 3 basierenden ASP.NET Core wie das neue Server Side Blazor-Framework und die Unterstützung von gRPC. Verbesserungen gab es auch beim Entity Framework Core. Die Version 3.1 war als LTS-Version konzipiert und enthielt eine Reihe von Fehlerbehebungen und Verbesserungen, insbesondere bei Windows Desktop und dem neuen Blazor Framework. Neu war die Unterstützung von C++/CLI (nur unter Windows).
Im November 2020 wurde dann .NET 5 als Nachfolger zu .NET Core und (nur eingeschränkt kompatibel) zu .NET 4.8 freigegeben. Bestimmte API-Lücken gegenüber dem klassischen .NET werden nur durch Windows-spezifische Zusatzpakete geschlossen (z. B. Microsoft.Windows.Compatibility). Das betrifft auch die im September 2019 im Rahmen der .NET Core Version 3.0 freigegebenen grafischen Benutzeroberflächen Windows Forms und WPF.
Seit Dezember 2020 werden die Updates auf Windows für .NET 5 und .NET Core als „Microsoft Updates“ unter bestimmten Voraussetzungen automatisch ausgeliefert.
Im November 2021 wurde .NET 6 freigegeben, mit Performanceverbesserungen und neuen Sprachfeatures in C# 10 und F# 6. Mit Hilfe der neuen Hot-Reload Funktion sind Änderungen an einer laufenden Anwendung unter bestimmten Voraussetzungen möglich (beispielsweise beim Debuggen mit Visual Studio 2022). Beim Arbeiten mit der Kommandozeile steht diese Funktion durch Start mithilfe von dotnet watch zur Verfügung.
Im Mai 2022 wurde die .NET Multi-Platform App UI (MAUI) eingeführt, die es ermöglicht, grafische Anwendungen mit einer einheitlichen Codebasis für verschiedene Plattformen (Windows, Android, iOS und macOS) zu entwickeln.
Im November 2022 erschien die Version 7 mit zahlreichen Leistungsverbesserungen, vollständiger AOT-Kompilierung und neuen Funktionen in C#11, F# 7, .NET MAUI, ASP.NET Core/Blazor, Web-APIs, WinForms, WPF.
Im November 2023 wurde die Version 8 freigegeben und enthält umfangreiche Neuerungen im Webframework Blazor, Erweiterungen und neuen Funktionen u. a. in C# 12, F# 8, WPF, .NET MAUI und dem Entity Framework Core. Mit .NET 8 wurde auch die .NET Aspire eingeführt. Die Veröffentlichung für .NET Aspire ist für das erste Halbjahr 2024 geplant. .NET Aspire bildet einen cloud­nativen Stack ab und bietet eine Reihe von Vorlagen und Werkzeugen, um das Erstellen und Ausführen verteilter Anwendungen zu vereinfachen. .NET Aspire hilft mit:
* Komponenten. NuGet-Pakete sind die .NET Aspire-Komponenten, die eine einfache Verbindung zu Plattformen oder Diensten wie PostgreSQL, Redis usw. ermöglichen.
* Orchestrierung. .NET Aspire ermöglicht eine einfache Verwaltung der Verbindungen und Konfiguration der cloudnativen Anwendung.
* Tools. .NET Aspire bietet Tools und mehrere Projektvorlagen zum Erstellen, Konfigurieren und Interagieren mit cloudnativen Anwendungen.
Microsoft gab bekannt, dass der Xamarin-Support im Mai 2024 endet.
Die Version 9 wurde im November 2024 veröffentlicht mit umfangreichen Leistungsverbesserungen und Integration von KI-Tools.

## Arten der Softwarelösungen, die mit .NET entwickelt werden können

Die Arten der Softwarelösungen
* Webanwendungen
* Mobile Apps
* Desktop-Anwendungen
* Backend- und Frontend-Teil der Anwendungen
* Cloud-Anwendungen
* Spiele und Simulationen
* IoT Apps

## .NET Tech Ökosystem nach Anwendungsgebiete
### Web- und Backend-Entwicklung

1. Webanwendungen und Websites:
1.1. Web Forms (Entwicklung dynamischer Webseiten durch Einsatz der voreingestellten oder benutzerdefinierten Steuerelementen und Komponenten)
1.2. ASP.NET MVC (Möglichkeit testgetriebener Entwicklung; die Erstellung der Lösungen nach Model-View-Controller Paradigmen)
1.3. ASP.NET Web Pages (Entwicklung von dynamischen Webseiten, Webanwendungen und Diensten)
2. Web APIs (ASP.NET Web API hilft beim Erstellen REST-basierter Webservices)
3. ASP.NET Single Page Application ist bei der Entwicklung der reaktionsfreudigen Apps mit vielen clientseitige Interaktionen verwendet.
4. Echtzeittechnologien (SignalR, Websockets)
5. Backend mobiler Apps kann mit ASP.NET Web API erstellt werden. ASP.NET ermöglicht die Erstellung mobiler Websites mit responsiven Designs
6. WebHooks

### Mobile Apps

* Xamarin (veraltete Technologie, seit dem 1. Mai 2024 nicht mehr unterstützt)
* .NET MAUI

### Desktop-Apps

* Windows Forms
* WPF
* UWP
* .NET MAUI

### Spielentwicklungs- und Visualierungsplattformen

* Unity
* MonoGame
* Godot
* Stride
* Flatredball
* Evergine
* CRYENGINE
* Unigine

### KI-Algorithmen

* Erstellen der KI-Modelle durch ML.NET
* Einsatz der vorgefertigten KI-Modelle aus OpenAI (z. B. ChatGPT)

## Unterstützte Betriebssysteme und Architekturen

.NET 9 wird auf folgenden Architekturen unterstützt: Windows (ab Version 10, für IA-32, x64 und Arm mit 32 Bit), macOS (ab 10.12) und verschiedene Linux-Distributionen (für x64 sowie ARM, letztere mit 32- und 64-Bit-Unterstützung). Auch für Docker gibt es offizielle Images. Canonical bietet auch Pakete für Snapcraft an.

## AOT- und JIT-Kompilierung

Bis .NET Core 3.0 erzeugte der .NET Compiler Programmdateien, in denen Common Intermediate Language durch die Common Language Runtime auf der Zielplattform in Maschinencode übersetzt werden musste. Die Just-in-time-Kompilierung (JIT) erfordert die zusätzliche und ineffiziente Verteilung von Laufzeitbibliotheken für die Zielplattform.
Eine in .NET Core 3.0 neu eingeführte Ahead-of-Time-Kompilierung (AOT) kann den IL-Code der Anwendung für die Zielplattform vorkompilieren. Dies ist optional und geschieht nachträglich im Rahmen eines „Veröffentlichung“ genannten Entwicklungsschrittes. Die entstehenden Programmdateien, die ReadyToRun-Images genannt werden, sollen dann schneller starten, da die Common Language Runtime den Code vor der Ausführung nicht mehr übersetzen muss. Diese AOT-Kompilierung stand zunächst nur für CLI-Software zur Verfügung. Als solche werden Cronjobs und Hintergrunddienste geschrieben, die auf Servern ohne Desktop-Oberfläche, zum Beispiel in Cloud-Umgebungen, stand-alone betrieben werden und die auf eine möglichst kurze Initialisierungszeit angewiesen sind.
.NET 7 unterstützte als erste Version der .NET-Plattform dann die vollständige, „native“ Ahead-of-time-Kompilierung für Windows und Linux, wodurch Software, die mit .NET geschrieben wurde, nicht länger auf eine Laufzeitbibliothek und eine Just-in-time-Kompilierung angewiesen ist und auf den Zielplattformen ohne zusätzlich einzubindende Softwarepakete ausgeführt werden kann. Diese echte AOT-Kompilierung kann aber zu Einschränkungen bei der Programmierung führen oder zusätzliche Maßnahmen erforderlich machen.
Damit kehrten die .NET-Plattformentwickler zum ursprünglichen Konzept der Anwendungsentwicklung zurück, bei dem Software vom Hersteller gezielt für bestimmte Plattformen veröffentlicht werden kann. Vorher entwickelte sich die .NET-Konzeption hin zur Idee eines auf allen Plattformen lauffähigen, universellen Programmpaketes, welches mit einem JIT-Compiler des Zulieferers (Microsoft) auf der Zielplattform ausgeführt wird.
Mit .NET sind nach wie vor beide Verbreitungswege möglich, da mit einem UWP-Paket Software im Microsoft Store für verschiedene Windows-Systeme (meist als Desktop-Software) vertrieben wird, während mit der Ahead-of-Time-Kompilierung durch eine zielgerichtet erzeugte, kleinere Programmdatei die Verteilung für verschiedene Betriebssysteme (meist als Hintergrundprozess ohne Benutzeroberfläche) erleichtert und die Performance der Software weiter verbessert werden soll.

### Einschränkungen

Die Ahead-of-Time-Kompilierung hat gegenüber dem herkömmlichen Verbreitungsweg einige Einschränkungen. Der Hersteller listet auf, dass mit Native AOT-Applikationen
* kein dynamisches Nachladen von Programmcode, wie Assembly.LoadFile möglich ist,
* kein Laufzeitcode generiert werden kann, der beispielsweise durch Reflexion entsteht,
* die Verwendung von C++/CLI grundsätzlich ausgeschlossen ist,
* COM nicht eingebaut ist,
* Trimming, die automatische Anpassung und Integration von verwendeten .NET-Abhängigkeiten in die Programmdatei, erforderlich ist, wodurch Einschränkungen entstehen,
* die Auslieferung in nur einer einzigen Programmdatei impliziert wird, wodurch Inkompatibilitäten entstehen,
* notwendige Laufzeitbibliotheken eingeschlossen sind, welche die Programmdatei selbst vergrößern,
* LINQ-Ausdrücke ausschließlich interpretiert werden und
* nicht alle Laufzeitbibliotheken kompatibel sind und einige Warnungsmeldungen, die entstehen, durch Entwickler nicht behoben werden können.

## Entwicklung
### Entwicklungsumgebungen

.NET-Anwendungen lassen sich mit folgenden Entwicklungsumgebungen entwickeln:
* Visual Studio 2022 (Windows)
* Visual Studio 2022 for Mac (macOS), Weiterentwicklung zum 31. August 2024 eingestellt
* Visual Studio Code (Windows, Linux, macOS)
* mit beliebigem Texteditor und per Kommandozeile mit dem .NET SDK
* JetBrains Rider (Windows, Linux, macOS)

### Programmiersprachen

Als Programmiersprachen für .NET werden C#, F# und VB auf allen oben genannten Betriebssystemen unterstützt, unter Windows zusätzlich noch C++/CLI.
Ähnlich wie beim klassischem .NET-Framework sind weitere Sprachen implementierbar. So entwickelt Iolevel, eine tschechische Firma, mit dem PeachPie-Compiler einen PHP-Compiler für .NET sowie eine dazu passende Visual-Studio-Erweiterung. Im März 2021 wurde die Version 1 freigegeben.

### Bereitstellung

.NET kennt verschiedene Arten der Veröffentlichung und Bereitstellung. Die framework-abhängigen Methoden setzten die Installation einer passenden Version des Laufzeitsystems auf dem Zielrechner voraus. Bei der eigenständigen Bereitstellung werden die benötigten Teile des Laufzeitsystems gemeinsam mit der Anwendung in einem Verzeichnis bereitgestellt, passend für Betriebssystem und Architektur des Zielrechners.
Es existieren offiziell von Microsoft unterstützte Docker-Images für das Entwickler-SDK sowie die Laufzeitumgebungen. Man kann seine .NET Anwendung daher vergleichsweise einfach plattformübergreifend in Containern betreiben. Auch eine Veröffentlichung des erstellten Images ist möglich. Das SDK-Image ist hierbei für die Kompilierung notwendig, während die daraus erstellten DLL-Dateien lediglich die schlankere Laufzeitumgebung benötigen.

## Anwendungsgebiete

.NET selbst ist ohne Zusatzpakete für Konsolenanwendungen und ASP.NET Core (automatisch integriertes Zusatzpaket) verwendbar.
Durch Zusatzpakete, die auch von Drittanbietern stammen können und in einer sehr großen Anzahl auf nuget.org verfügbar sind lässt sich die Basis-Funktionalität des Frameworks erheblich erweitern. Einsatzgebiete, bei denen .NET einen zentralen Bestandteil darstellt, sind beispielsweise:
* Universal Windows Platform (UWP)
* Klassenbibliotheken für den .NET Standard
* Cross-Plattformentwicklung mit GTK#
* plattformunabhängige Benutzeroberflächen mit Avalonia UI
* ab Version 3 Windows-Desktop-Oberflächen mit WPF, WinForms oder UWP
* PHP-Entwicklung mit PeachPie
Die allermeisten Einsatzszenarien, bei denen das frühere .NET-Framework verwendet wurde, können auch mit .NET (ggf. ergänzt um Zusatzpakete) realisiert werden. Für einige der gekündigten Techniken gibt es Lösungen als Community-Projekt (z. B. für WCF das Projekt CoreWCF).

## Bestandteile

Die wichtigsten Komponenten von .NET sind:
* die Laufzeitumgebung mit den Klassenbibliotheken
* die Laufzeitumgebung und Klassen für ASP.NET Core (seit Core Version 3.0 fester Bestandteil)
* das .NET Core bzw. das .NET SDK
Ist das SDK installiert, so können zahlreiche Aufgaben der Softwareentwicklung mit dem Kommando dotnet erledigt werden, z. B. dotnet build – also (englisch für) „[das] Übersetzen der Anwendung“.