.NET (Plattform)

quelloffener Nachfolger des .NET-Frameworks von 2016

.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

Basisdaten

EntwicklerMicrosoft
Erscheinungsjahr2016
Aktuelle Version8.0.4[1][2]
(9. April 2024)
Aktuelle Vorabversion9.0.0-preview.3[3]
(11. April 2024)
BetriebssystemLinux, macOS, Windows
Programmiersprachevorwiegend C#
LizenzMIT
dotnet.microsoft.com

.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
VersionDatum
1.0 RC 118. Nov. 2015
1.0 RC 216. Mai 2016
1.027. Juni 2016[4]
1.0.16 (EoL)[5]14. Mai 2019
1.117. Nov. 2016
1.1.13 (EoL)[5]14. Mai 2019
2.014. Aug. 2017
2.0.9 (EoL)[5]10. Juli 2018
2.130. Mai 2018
2.1.30 (EoL)[5]19. Aug. 2021[6]
2.24. Dez. 2018
2.2.8 (EoL)[5]19. Nov. 2019[7]
3.023. Sep. 2019
3.0.3 (EoL)18. Feb. 2020
3.13. Dez. 2019
3.1.32 (EoL)[8]13. Dez. 2022
5.0.17 (EoL)[9]10. Mai 2022
6.08. Nov. 2021
6.0.29[10]9. Apr. 2024
7.0.18[11]9. Apr. 2024
8.0.4[12]9. Apr. 2024

.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.[13] 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.[14] Am 27. Juni 2016 wurde die Version 1.0 veröffentlicht.[4] 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.[15][16] Diese Version wurde auch zur LTS-Version erklärt, die dann bis zum 21. August 2021 unterstützt wurde.[17]

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.[18] 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.[19][20] Verbesserungen gab es auch beim Entity Framework Core.[21] 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).[22]

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.[23][24]

Seit Dezember 2020 werden die Updates auf Windows für .NET 5 und .NET Core als „Microsoft Updates“ unter bestimmten Voraussetzungen automatisch ausgeliefert.[25]

Im November 2021 wurde .NET 6 freigegeben, mit Performanceverbesserungen und neuen Sprachfeatures in C# 10 und F# 6.[26][27] 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.[28][29][30]

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.[31][32][33]

Im November 2022 erschien die Version 7 mit zahlreichen Leistungsverbesserungen,[34] vollständiger AOT-Kompilierung und neuen Funktionen in C#11, F# 7, .NET MAUI, ASP.NET Core/Blazor, Web-APIs, WinForms, WPF.[35]

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.[36][37] 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.[38] .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:[39]

  • 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 Veröffentlichung von .NET 9 ist für November 2024 geplant.

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

Die Arten der Softwarelösungen

.NET Tech Ökosystem nach Anwendungsgebiete

Web- und Backend-Entwicklung

1. Webanwendungen und Websites:

1.1. Web Forms (Entwicklung dynamischer Websiten 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[40]

Mobile Apps

  • Xamarin (veraltete Technologie, ab 1. Mai 2024 nicht mehr unterstützt)
  • .NET MAUI

Desktop-Apps

Spiele

KI-Algorithmen

  • Erstellen der KI-Modelle durch ML.NET
  • Einsatz der vorgefertigten KI-Modelle aus OpenAI (z. B. ChatGPT)[42]

Unterstützte Betriebssysteme und Architekturen

Das Software-Development-Kit wird auf folgenden Architekturen unterstützt: Windows (ab Version 7, 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).[43][44] Auch für Docker und Snappy gibt es offizielle Images.[45][46]

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 neu eingeführte Ahead-of-Time-Kompilierung (AOT) in .NET Core 3.0 hat den IL-Code der Anwendung für die Zielplattform vorkompiliert; die entstehenden Programmdateien, die ReadyToRun-Images genannt werden, sollten schneller starten, da die Common Language Runtime den Code vor der Ausführung nicht mehr übersetzen musste. Die AOT-Kompilierung stand zunächst nur für CLI-Software zur Verfügung.[47] 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 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.[48]

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 (UWP), 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:

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.[53][54][55]

Ä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.[56][57][58]

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.[59]

Es existieren offiziell von Microsoft unterstützte Docker-Images für das Entwickler-SDK sowie die Laufzeitumgebungen.[45] 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.[60]

Durch Zusatzpakete, die auch von Drittanbietern stammen können und in einer sehr großen Anzahl auf nuget.org verfügbar sind[61] 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[62]
  • Cross-Plattformentwicklung mit GTK#[63]
  • plattformunabhängige Benutzeroberflächen mit Avalonia UI[64]
  • 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).[65][66][67]

Bestandteile

Die wichtigsten Komponenten von .NET sind:[68]

  • 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“.[69]

Literatur

Lehrbücher

Weblinks

Einzelnachweise