.NET 6.0 Aktualisierung

2021-11-19

.NET 6

Der Lockdown scheint Microsoft nicht allzu sehr betroffen zu haben. In diesem Jahr hat sich ein Füllhorn an neuer Software aufgetan – das sind das lang ersehnte Windows 11, das neue Visual Studio 22, und natürlich .NET Framework 6.0. In diesen nicht so lustigen Zeiten sind solche Nachrichten wirklich willkommen.

Lassen Sie uns vielleicht das interessanteste neue Produkt für Entwickler, das .NET 6.0 betrachten. Kaum haben Entwickler ihre Projekte auf NET 5.0 umgestellt, kommt schon die nächste Version. Um es gleich vorwegzunehmen: ich möchte ganz offen sagen, die Version 6 ist keine grundlegende neue, sondern eine nachgearbeitete 5. Version. Bei den meisten Änderungen handelt es sich um Verbesserungen oder Umgestaltungen gegenüber der letztjährigen Version, aber die sechste Version ist jetzt eine LTS-Version (Long Time Support) mit dem langfristigen Support. Dies gilt von nun an für alle geradzahligen Versionen.

Wie Sie sich erinnern, hat Microsoft ab der .NET 5.0 Version beschlossen, alle seine Frameworks in einem einzigen zusammenzufassen, um den ganzen "Zoo" wegzumachen. Das heißt, das ursprüngliche .NET Framework Konzept wurde wieder eingeführt, nur jetzt ist es kein Monolith, sondern sieht nur so aus.

Die Änderungen und Ergänzungen zu NET 6.0 sind zahlreich, und damit dieser Artikel nicht zu einer langwierigen Abhandlung wird, werde ich kurz die Wichtigsten und die Interessantesten davon zusammenfassen:

1. Crossgen2 - Vorkompilierung

Das aktualisierte Crossgen-Dienstprogramm verfügt über eine zweite Version. Die alte Vorkompilierungstechnologie war ehrlich gesagt unvollkommen und erlaubte nur die Generierung von nativem Code für die Plattform, auf der das alte Crossgen-Dienstprogramm gestartet wurde. Jetzt können Sie den JIT-Compiler unabhängig von der Plattform mit verschiedenen Strategien und Optimierungen je nach Situation ausführen.

2. Profile-Guided Optimization (PGO)

Hierbei handelt es sich um eine Compiler-Optimierung, um die Kompilierung von Programmteilen zu priorisieren. Der Punkt ist, dass bei weitem nicht alle Programmteile im realen Betrieb verwendet werden oder nur äußerst selten verwendet werden, zum Beispiel einige exotische Verzweigungen in else if. Sie können also ein Programm besser optimieren, wenn der Compiler die am häufigsten verwendeten Programmblöcke weiß. Sie können nun den Analysator aktivieren, um häufig und selten benutzte Fragmente beim Betrieb des Programms zu erkennen und ein Optimierungsprofil zu erstellen. Es gibt drei Optimierungsszenarien:

  • Statischer Ansatz, bei dem man zwischen häufig und selten genutzten Codes (hot-cold splitting) unterscheidet. In diesem Fall wird das Optimierungsprofil nur einmal erstellt. Ändern sich die Betriebsbedingungen des Programms, muss es für die erneute Optimierung neu erstellt werden. Bei diesem Ansatz werden die am häufigsten verwendeten Programmteile kompiliert und nebeneinander in einer ausführbaren Datei abgelegt. Dadurch wird es dank der Verwendung des Caches sehr schnell geladen. Sehr selten verwendeter Code wird überhaupt nicht kompiliert. Bei Bedarf wird er bereits während der Ausführung des Programms kompiliert.
  • Dynamischer Ansatz, bei dem kein vorläufiges Optimierungsprofil erstellt wird. Die Auswerteeinheit überwacht die Programmausführung zur Laufzeit und kompiliert Codeabschnitte neu, wenn eine Optimierung erforderlich ist.
  • Der gemischte Ansatz spricht für sich selbst. Natürlich werden hier beide Ansätze verwendet. Das heißt, das Programm wird zunächst nach dem Optimierungsprofil optimiert. Während des Betriebs wird sie dann nach einem dynamischen Schema angepasst.

3. Hot reload

Diese Funktion wird Sie besonders überraschen. Endlich ist das Debuggen von Anwendungen viel einfacher geworden! Jetzt können Sie das Debuggen einmal ausführen und den Code "live" bearbeiten. Wenn Sie schon einmal Javascript in Ihren .NET Core-Projekten debuggt haben, werden Sie das Prinzip sofort verstehen.

Wahrscheinlich erinnern Sie sich an eine Sache wie "Ändern und weitermachen". Und wir hatten früher die Möglichkeit, den Code zur Laufzeit zu ändern, aber es war nicht sehr praktisch. Wir mussten Haltepunkte setzen, und die Anwendung wurde angehalten. Vor der Stelle, die wir ändern wollten, musste ein Haltepunkt gesetzt werden. Und die Möglichkeiten zur Veränderung waren sehr begrenzt.

https://docs.microsoft.com/en-us/visualstudio/debugger/supported-code-changes-csharp?view=vs-2019

Wir können den Code nun direkt zur Laufzeit während des Debuggens korrigieren. Speichern Sie dann die Änderungen und sehen Sie sie in Echtzeit. Dies beschleunigt das Debuggen von Programmen erheblich, insbesondere wenn Sie wissen, was und wo zu beheben ist, und das Ergebnis sofort sehen möchten, ohne das Debuggen neu zu starten. Und ja, das funktioniert jetzt auch in VS Code. Die Liste der verfügbaren Änderungen ist nicht sehr umfangreich und kann hier eingesehen werden.

4. .NET MAUI

Im Rahmen der Globalisierung, d. h. der Zusammenführung aller Frameworks in ein einziges, fügt Microsoft die Unterstützung für Xamarin zu .NET 6 hinzu. Die Entwicklung für macOS, iOS und Android in VisualStudio ist jetzt für uns verfügbar. Im Standard-SDK funktioniert es jedoch nicht. Sie müssen die Optional SDK Workloads installieren. Tatsächlich wird die Entwicklung immer bequemer. Ein Android-Projekt können Sie jetzt mit einem Befehle erstellen:

dotnet new android

Der Name Xamarin wurde fallen gelassen. Jetzt wurde uns die Multi-Plattform-App-Benutzeroberfläche oder abgekürzt MAUI präsentiert.

5. Minimal API Framework

Ein so interessantes Tool wie Minimal API kann man nicht ignorieren. Dieses Framework ermöglicht es Ihnen, mit minimalem Code auszukommen, um Webmethoden zu erstellen und darauf zuzugreifen. Sie müssen nicht die ganze MVC-Bündelung erstellen, Controller- und Methoden-Überschriften konfigurieren, um das Routing einzurichten. Außerdem wird auch Setup.cs nicht mehr benötigt. Es reicht nur Program.cs, in dem Sie sofort Webmethoden mit Routing erstellen können.

app.MapGet("/", (Func<string>)(() => "Hello World!"));

Die unbenannte Funktion gibt auf jede Anfrage "Hello World!" zurück. Dies ist genau das, was für Microservices oder Prototyping benötigt wird.

6. Unterstützte Betriebssysteme

Microsoft hat alle unterstützten Betriebssysteme veröffentlicht, und zwar:

  • Windows - Windows Client, Windows 10 Client, Windows 11, Windows Server, Windows Server Core, Nano Server;
  • MacOS;
  • Linux - Alpine Linux, CentOS, Debian, Fedora, openSUSE, Red Hat Enterprise Linux, SUSE Enterprise Linux (SLES), Ubuntu;
  • Smartphone - Android und iOS.

7. Unterstützung für die ARM64-Architektur

Die Unterstützung für ARM64 ist ab NET 5 für Windows verfügbar. In Version 6 wurde sie auf die ARM64-Prozessoren von Apple erweitert.

8. Unterstützung für Blazor-Desktop-Anwendungen

Obwohl Blazor ein Framework für Browseranwendungen ist, hat Microsoft beschlossen, Muster zu brechen und die Erstellung von Desktop-Anwendungen zu ermöglichen. Offensichtlich hat sich Blazor gut bewährt.

9. MSBuild Optimierung

Der Razor-Compiler wurde zu Roslyn Source Generators verschoben, was den Assembly erheblich beschleunigt hat. Roslyn Source Generators erschien bereits in NET 5 und sorgte für viel "Aufsehen", weil es die Möglichkeit bot, während der Entwicklung C # Code zur Laufzeit zu generieren.

10. LINQ

Auch unser beliebtes LINQ wurde nicht vernachlässigt. In jeder .NET-Version wird versucht, der Sprache etwas Neues hinzuzufügen (insbesondere in .NET 5), und diese Version bildet da keine Ausnahme. In den letzten Jahren wurde die LINQ-Leistung verbessert sowie die Code-Duplizierung reduziert. Hier ist eine kleine Liste mit nützlichen "Tricks":

  • Mit der TryGetNonEnumeratedCount Funktion können Sie die Anzahl der Sequenzelemente ermitteln, ohne sie nachzusortieren, wodurch das Programm in einigen Fällen erheblich beschleunigt wird;
  • Die Chunk-Funktion teilt die Sequenzelemente in eine bestimmte Anzahl von Gruppen auf;
  • Mit den Funktionen MaxBy und MinBy können Sie das maximale bzw. minimale Element aus einem gegebenen Schlüsselselektor ermitteln;
  • Die Funktionen DistinctBy, ExceptBy, IntersectBy und UnionBy ermöglichen auch Schlüsselselektor-Aktionen;
  • Die Funktionen ElementAt und ElementAtOrDefault geben das Element nach Index mit einem Unterschied in Form der Rückgabe eines Standardwerts zurück;
  • Die FirstOrDefault Funktion bietet endlich die Möglichkeit, einen Standardwert zu setzen. Ihre Gebete wurden erhört, denn nicht jeder war mit null zufrieden;
  • Die Max-Funktion kann jetzt eine Vergleichseinheit zum Vergleichen von Werten zu akzeptieren;
  • Mit der Take-Funktion können Sie jetzt einen Bereich festlegen.

11. JSON

Und natürlich die Änderungen an der System.Text.JSON-Bibliothek. Die wichtigsten Änderungen wurden am Serializer vorgenommen. Und zwar:

  • Zyklische Links ignorieren;
  • IAsyncEnumerable<T> Objekt hinzugefügt, das sich in ein Array verwandelt;
  • Deserialisieren eines Array-Dokuments, in dem es eine DeserializeAsyncEnumerable-Methode gibt.
  • Unterstützung für source generators – eine Serialisierungstechnologie ohne Reflexion, die das Programm wesentlich schneller und billiger macht;
  • Neue IJsonOnDeserialized, IJsonOnDeserializing, IJsonOnSerialized, IJsonOnSerializing Schnittstellen hinzugefügt, die jeweils gleichnamige Ereignishandler enthalten. Das heißt, es ist möglich, während der Serialisierung/Deserialisierung beliebigen Code auszuführen;
  • Mit dem JsonPropertyOrder-Attribut kann die Reihenfolge festgelegt werden, in der die Felder serialisiert werden;
  • Deserialisierung aus Stream;

Eine sehr interessante Funktion ist auch die Unterstützung für den Umgang mit den JSON-Dokumenten wie mit DOM. Diese Funktion ist sehr nützlich, da man oft keine POCO-Objekte für einfache Operationen erstellen möchte. Vergessen Sie nicht, dass der DOM-Ansatz für JSON ohnehin eine Leistungsabnahme und Ressourcenüberschreitung darstellt. Uns wurde versichert, dass dies nicht der Fall sein wird, aber wir werden es in der Praxis herausfinden.

12. HTTP/3

Das HTTP-Protokoll existiert schon seit Ewigkeiten. Es ist allgemein bekannt, dass es auf einem anderen TCP-Protokoll basiert, das noch länger existiert. Ja, die rasante Entwicklung des Internet hat HTTP in einen Winkel getrieben - vor dem Hintergrund der zunehmenden Netzbandbreite sieht es wie ein schwaches Glied aus. Und nun haben wir endlich die dritte Version dieses wunderbaren Protokolls bekommen, die Probleme zwar nicht beseitigt, aber deutlich verringert.

Das neue QUIC-Protokoll, das TCP ersetzt, ist bei Paketverlusten schneller. Beim Verbindungsaufbau geht es schneller. Damit kann man die Daten parallel übertragen. Und es ist grundsätzlich sicher, da die Anfragen verschlüsselt werden.

13. Priorität der Warteschlange

Eine neue Klasse, die Warteschlange mit PriorityQueue<TElement,TPriority> Priorität erschienen. Sie können die Priorität für jedes hinzugefügte Element festlegen und eine Prioritätswarteschlange erstellen. Diese Elemente werden beginnend mit einer niedrigeren Priorität beseitigt.

14. Datum/Uhrzeit

Auch das Datum wurde überarbeitet. Die interessantesten Änderungen sind:

  • Es gibt zwei neue Methoden System.DateOnly und System.TimeOnly, mit denen Sie direkt mit Datum oder Uhrzeit arbeiten können, und nicht wie bisher mit DateTime.
  • Zeitzonen umrechnen. Das heißt, Sie können jetzt Windows- oder IANA-Bezeichner verwenden, wenn Sie eine Zone mit der TimeZoneInfo.FindSystemTimeZoneById Methode definieren. Wird bei der Suche keinen Zonen-Bezeichner eines Typs nicht gefunden, wird die Uhrzeit automatisch in ein anderes Format umgewandelt, das dem zweiten Bezeichnertyp entspricht.

15. Unterstützung für C# 10

Die neuen Funktionen der Version 10 sind Gegenstand eines separaten Artikels. Daher werde ich hier nicht einmal die Interessantesten erwähnen. Im Moment können Sie sich diese Liste mit Änderungen ansehen.

Fasen wir kurz zusammen. Was bietet uns.NET 6:

  • Leistung - dank verschiedener Optimierungsfunktionen ist die .NET 6-Plattform tatsächlich sehr schnell, vor allem wenn es um das Web geht.
  • Allgemeiner Ansatz – eine einheitliche Plattform zur Erstellung beliebiger Anwendungen für verschiedene Plattformen. Viele haben diese Idee positiv angenommen. Die Eintrittsschranken in die Entwicklung sind deutlich niedriger, und es ist genauso praktisch. Aber es gibt genug Skeptiker. Wir alle wissen, dass das Allgemeine meist schlimmer als das Besondere ist.

Selbstverständlich haben wir unsere Produkte auf ihre Kompatibilität mit dem neuen Framework getestet. FastReport funktioniert mit .NET 6 genauso gut wie mit der 5. Version.

Unserer Meinung nach ist die Konsolidierung von Plattformen, Sprachen und Technologien der richtige Weg. Ja, das technische Wissen der jüngeren Generation nimmt ab, aber es wird nicht mehr benötigt. So wie das Automatikgetriebe das Schaltgetriebe ersetzt. Die Leute müssen einfach nur fahren und nicht über Gänge und Motordrehzahlen nachdenken. Viele moderne Entwickler wollen auch die technischen Einzelheiten der Implementierung dieser oder jener Prozesse nicht verstehen. Jetzt können sie sich nur noch mit dem kreativen Entwicklungsprozess auseinandersetzen.

9. November 2023

Bericht in C# in FastReport Cloud erstellen

In diesem Artikel zeigen wir Ihnen anhand eines Beispiels, wie Sie mit FastReport Cloud SDK Berichte erstellen und in ein beliebiges Format exportieren können.
22. März 2023

Erstellen eines PDF-Berichts in JetBrains Rider (C#) unter Ubuntu 22.04.1 LTS

In diesem Artikel werfen wir einen Blick auf die Welt der .NET-Plattform in Ubuntu 22.04.1 LTS, und erstellen einen Bericht, der ins PDF-Format exportiert werden kann.
14. März 2023

Zukunft der mit Blazor WebAssembly generierten Berichte

Schritt-für-Schritt-Anleitung zum Erstellen einer Demo-Anwendung auf .NET 6 und 7 direkt im Browser mit Blazor WebAssembly in FastReport .NET.
Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2024 Fast Reports Inc.