Zoals velen van jullie misschien al weten, brengt Microsoft elk jaar een nieuwe versie van .NET uit. Op het moment van schrijven zijn .NET 6 en .NET 7 de twee meest recente grote releases van het .NET-platform van Microsoft. Beide releases bevatten een hele reeks nieuwe functies en verbeteringen, maar ontwikkelaars moeten zich bewust zijn van enkele belangrijke verschillen tussen de twee versies.
Laten we de verschillen tussen .NET 6 en .NET 7 eens nader bekijken.
.NET 6 is uitgebracht in november 2021, terwijl .NET 7 is uitgebracht in november 2022.
Inhoudsopgave
Performantie
Dit jaar staat prestatie centraal. De ontwikkelaars bij Microsoft hebben er een jaar over gedaan om dit pull-request na pull-request te verfijnen. Verder hebben ze ook de LINQ (taalgeïntegreerde query) en just-in-time (JIT)-compilatie verbeterd.
1. LINQ
LINQ (Language-Integraded Query) is de naam voor een reeks technologieën die zijn gebaseerd op de integratie van querymogelijkheden rechtstreeks in C# language.
Met vectorisatie die volledig gebruik maakt van nieuwere hardware waarmee .NET meerdere gegevens tegelijkertijd kan verwerken. De aggregatiesnelheid van LINQ is nu sneller dan ooit tevoren. Een query die bijvoorbeeld het gemiddelde van een reeks van 1 miljoen getallen doorzoekt, loopt bijna 26 keer sneller.
Dankzij het feit .NET open source is, kan je de broncode controleren en zien dat die tot uitvoering is gekomen met behulp van de Vector-class.
Aangezien veel developers LINQ gebruiken voor veel verschillende cases, is dit een grote plus voor .NET.
Het resultaat is verbluffende snelheid. De tijd die hier gemeten wordt is de duur die .NET 6 en .NET 7 nodig hadden om een array van 1 000 gehele getallen te sorteren. Zoals je kan zien is elkee aggregatiebewerking van de LINQ is nu sneller.
2. JIT
JIT staat voor “Just-In-Time” en verwijst naar een type compiler dat code tijdens runtime compileert, wanneer dat nodig is, in plaats van van tevoren. Dit kan de prestaties van een programma verbeteren doordat de compiler de code kan optimaliseren op basis van de specifieke omgeving waarin het wordt uitgevoerd. Terwijl een complexe on-stack vervanging gebruikt wordt.
Stack replacement verwijst naar een techniek die wordt gebruikt om de uitvoering van code te optimaliseren. Wanneer een functie wordt opgeroepen, worden de argumenten en lokale variabelen doorgaans opgeslagen in een stapelframe. Met stackvervanging kan de JIT-compiler veelgebruikte stackwaarden vervangen door registers, die sneller toegankelijk zijn. Dit bereikt men door vast te stellen welke stapelwaarden het vaakst gebruikt worden en er registers aan toe te wijzen zodat ze die waarden vasthouden. De ongebruikte stapellocaties kunnen vervolgens worden gebruikt om andere gegevens of instructies op te slaan, wat leidt tot efficiënter geheugengebruik en snellere code-uitvoering.
Web Development
Zowel .NET 6 and .NET 7 komen met verbeteringen voor webdevelopment. .NET 6 introduceerde bijvoorbeeld een nieuw web framework genaamd minimal APIs, deze laat developers snel lightweight HTTP endpoints bouwen zonder een volledig MVC framework nodig te hebben. .NET 7 bouwt hier verder op, met nog meer verbeteringen dankzij minimal APIs, alsook andere web development features zoals verbeterde support voor gRPC.
1. Minimal APIs
Een van de grootste veranderingen in webontwikkeling in .NET 6 is de introductie van Minimal APIs.
Minimal APIs zijn ontworpen om HTTP APIs te creëren met minimale dependencies. Dit nieuwe web framework stelt ontwikkelaars in staat om snel lightweight HTTP endpoints te bouwen, opnieuw, zonder een full MVC framework te moeten gebruiken.
Dankzij Minimal APIs, kan je jouw endpoints bepalen door de simpele C# code te gebruiken. Zo wordt het veel makkelijker om te starten met web development in .NET. Deze API’s zijn ideaal voor microservices en apps die enkel de minimum files, features, and dependencies in ASP.NET Core willen bevatten.
.NET 7 bouwt voort op de functieset van Minimal API’s door meer mogelijkheden en verbeteringen toe te voegen. Zoals endpoint filters, route groups en typed results, die ervoor zorgen dat minimal APIs nog krachtiger en efficiënter worden. Dit alles maakt het een nog krachtigere optie voor het bouwen van lightweight webapplicaties.
2. Blazor
Blazor is een bekend webontwikkelingsframework waarmee ontwikkelaars webapps kunnen maken in C# en .NET in plaats van JavaScript. Blazor ontving een aantal verbeteringen met.NET 6, waaronder verbeterde ondersteuning voor server-side rendering en verhoogde snelheid. NET 7 blijft Blazor verbeteren door nieuwe functies en toevoegingen toe te voegen die het nog krachtiger en gebruiksvriendelijker kunnen maken.
Je kan Blazor componenten bijvoorbeeld gebruiken van bestaande JavaScript projecten, zoals diegene die gemaakt zijn met populaire front-end frameworks zoals Angular, React, or Vue.
Hedendaagse browsers hebben APIs voor het maken van aangepaste componenten die UI elements kunnen bevatten. Deze customized elements kunnen vervolgens in elke webinterface worden gebruikt.
- Heeft ook verbeteringen voor het configureren van data binding (Get/Set/After Modifiers).
- Nieuw Blazor template om je project in visual studio te starten.
- Een groeiende ondersteuning van versleutelingsalgoritmen.
- Nieuwe events and authenticatieverzoeken.
- Zonder afhankelijkheid van het Blazor UI component model kan je nu .NET code van JavaScript gebruiken. Dankzij de .NET WebAssembly runtime of JavaScript functionaliteit van .NET.
3. gRPC
gRPC is een RPC (Remote Procedure Call) open-source framework dat het mogelijk maakt om high-performance, scalable APIs te bouwen die overheen meerdere platformen en net languages kunnen gebruikt worden. .NET 6 introduceerde een verbeterde ondersteuning voor gRPC, zodat het makkelijker is geworden om gRPC-based applicaties met .NET te bouwen.
.NET 7 blijft de ondersteuning van gRPC verbeteren, dankzij:
- Performance verbeteringen
- RESTful services maken met RPC JSON transcoding
- gRPC apps mogelijk maken op Azure App Services
4. OpenAPI
De OpenAPI Specificatie (OAS) zorgt ervoor dat REST-compliant APIs worden beschreven, ontwikkeld, getest en gedocumenteerd. In een notendop: het is een specificatie voor een machine-readable interface definition language met als doel webservices te beschrijven, produceren, consumeren en visualiseren.
.NET 6 introduceerde built-in support voor OpenAPI, om het generen van API documentation te vergemakkelijken alsook het testen van jouw APIs using te vereenvoudigen met het gebruik van Swagger UI.
.NET 7 zal naar verwachting de OpenAPI-ondersteuning blijven verbeteren, met meer functies en verbeteringen die het nog eenvoudiger kunnen maken om API’s te bouwen en te documenteren met .NET. Samenvattend bieden zowel .NET 6 als .NET 7 een aantal verbeteringen en uitbreidingen voor webdevelopment, met functies zoals Minimal APIs, Blazor, gRPC, and OpenAPI waardoor het makkelijker wordt om snelle, schaalbare en efficiënte webapplicaties te bouwen met .NET.
Desktop Development
.NET 7 brengt belangrijke updates en verbeteringen aan desktop (en mobiele) ontwikkelingsframeworks waardoor ze moderner, eenvoudiger en sneller worden:
1. WinForms
WinForm ( Windows Form Application) is een UI framework voor het bouwen van Windows-desktopapplicaties die al zo’n 20 jaar bestaat. Microsoft wil “Windows Forms-ontwikkelaars helpen hun bestaande apps te moderniseren en nieuwe cloudgebaseerde technologieën te gebruiken”. Een manier om dit te doen is door ontwikkelaars aan te moedigen om over te stappen van het traditionele code-behind-patroon naar het MVVM pattern. Dit modernere patroon helpt ontwikkelaars om bedrijfslogica uit code-behind-pagina’s te halen en de code gemakkelijker te testen en meer herbruikbaar te maken. Om deze strategie te bevorderen heeft WinForms’ data-binding system zich geallieerd met WPF en Xamarin, beiden technologieën die reeds gebruik maken van MVVM.
Eerder in dit artikel hebben we JIT-compilatie besproken. Microsoft moedigt dit aan en vergemakkelijkt het publiceren van toepassingen met NativeAOT, een alternatief voor JIT. Dit door één enkele regel toe te voegen aan het .csproj-bestand. De verwachte voordelen van deze technologie zijn snellere opstarttijden, minder geheugengebruik en de mogelijkheid om de toepassing uit te voeren op eender welke Windows- of Linux-machine waarop de .NET-runtime niet geïnstalleerd is.
Bovendien werkten de teams van Microsoft en enkele leden van de community aan een heleboel andere functionaliteiten. Zo hebben ze de functies voor drag-and-drop and dialog gemoderniseerd. Ze hebben de toegankelijkheid, zichtbaarheid en automatisering van WinForms-besturingselementen verbeterd. En tot slot hebben ze enkele weergaveproblemen met WinForms-besturingselementen opgelost. In .NET 7 devblogs heeft Microsoft gecommuniceerd dat ze het moeizame proces van bugfixing, hoge DPI en schaalproblemen voor speciale monitoren en multi-monitor setups blijven voortzetten.
2. WPF
WPF (Windows Presentation Foundation) heeft ook een aantal updates ontvangen, die gericht zijn op het verbeteren van de prestaties, toegankelijkheid en bugfixes. De prestatieverbetering in WPF-bibliotheken is bereikt door het vermijden van het in dozen plaatsen van variabelen, het verwijderen van onnodige objecten en verzamelingstoewijzingen, en het herstructureren van diverse klassen zoals wrappers of parsers. Deze nieuwe versie van .NET verbetert de toegankelijkheid van de applicatie door handige nieuwe snelkoppelingen toe te voegen, en schermlezers lezen nu correct te controleren menu-items. Dankzij de feedback van de community zijn veel bugs opgelost en Microsoft is van plan om interne integratietests openbaar te maken op GitHub, waardoor ontwikkelaars de kwaliteitscontrole verder kunnen verbeteren door hun eigen integratietests toe te voegen aan deze repository. Het interne team van Microsoft is erg dankbaar voor de betrokkenheid van de community en blijft de kwaliteitscontrole pushen door middel van basale regressietests op pull-aanvragen.
3. .NET MAUI
.NET Multiple-platform App UI is het framework dat wordt gebruikt om native, platformonafhankelijke desktop- en mobiele apps te bouwen vanuit een enkele C#-codebase voor Android, iOS, Mac en Windows. Er zijn een heleboel nieuwe bedieningselementen toegevoegd aan het jonge MAUI-framework dat in april 2022 is uitgebracht. De langverwachte officiële Map control is eindelijk beschikbaar, hierdoor wordt het makkelijker om kaarten, markeringen, polygonen, pins, geolocatie van gebruikers, traffic, enz. toe te voegen in uw mobiele en desktop-applicatie.
Daarbovenop is er een TwoPaneView control toegevoegd. Dit besturingselement plaatst onderliggende inhoud naast elkaar of verticaal en lijnt de onderliggende inhoud uit op basis van het scharnier of de schermvouw bij opvouwbare Android-apparaten. Er zijn ook veel basis UI-bureaubladfuncties toegevoegd, zoals contextmenu’s, tooltips, “rechtsklikken”, aanwijzerbewegingen en “aanwijzer volgen”. Er zijn ook meer globale verbeteringen merkbaar, zoals de nieuwe delegates die worden gebruikt in de iOS-levenscyclus. Tot slot werd er update van de Window Class toegevoegd, die een nauwkeuriger beheer van de positie en grootte van het toepassingsvenster in desktopversies mogelijk maakt.
MAUI profiteert ook van de algemene prestatieverbeteringen van .NET en wint aan efficiëntie bij het scrollen door CollectionViews, lay-outberekeningen, opstarttijd, applicatiegrootte, navigatie tussen pagina’s en nog veel meer.
Cloud Development/Containerization
Containers zijn een soort lichtgewicht virtualisatietechnologie waarmee applicaties in een geïsoleerde omgeving kunnen worden uitgevoerd, waardoor het gemakkelijker wordt om ze op verschillende systemen in te zetten en te beheren. Ze worden steeds populairder in cloudimplementaties omdat ze draagbaarheid en flexibiliteit bieden, waardoor ontwikkelaars hun applicaties gemakkelijk kunnen verplaatsen tussen verschillende omgevingen of cloudproviders.
Met het uitbrengen van .NET 7 heeft Microsoft het makkelijker gemaakt om .NET applications in containers te plaatsen zonder gebruik te moeten maken van Docker Desktop. Dit betekent dat ontwikkelaars vanaf nu het simpele command line interface (CLI) kunnen gebruiken om hun containers te plaatsen en aan te passen, ongeacht welke containerruntime ze gebruiken.
Microsoft heeft ondersteuning in Visual Studio aangeleverd gecontaineriseerde applicaties in Azure container Registry te publiceren. Met deze ondersteuning kunnen ontwikkelaars eenvoudig hun container-images publiceren naar de Azure Container Registry van Visual Studio.
Bovendien heeft Microsoft met de release van .NET 7 het voor ontwikkelaars eenvoudiger gemaakt om CI/CD workflows op te stellen via GitHub Actions. Met een simpele klik met de rechtermuisknop in Visual Studio kunnen ontwikkelaars een vooraf gedefinieerde GitHub Actions-workflow maken voor het bouwen, testen en implementeren van hun .NET-applicaties.
Wanneer een toepassing die wordt uitgevoerd op Azure een probleem of fout tegenkomt, kan Azure Monitor een dump file met informatie over de status van de toepassing op het moment van de fout aanmaken. Dit dumpbestand kan vervolgens worden geanalyseerd met behulp van de diagnostische hulpprogramma’s van Visual Studio om de oorzaak van het probleem te identificeren. Ten slotte zijn er meerdere manieren om container-apps in Azure te hosten, elk met zijn eigen voordelen en use-cases. Enkele van de meest gebruikelijke manieren om container-apps in Azure te hosten zijn Azure App Service, Azure Kubernetes Service, en Azure container Apps. Deze laatste is een nieuwer aanbod van Microsoft waarmee ontwikkelaars gecontaineriseerde applicaties rechtstreeks in Azure kunnen implementeren.
Conclusie
Moet u overstappen naar .NET 7?
.NET 7 is geen release voor ondersteuning op lange termijn (LTS). Microsoft biedt doorgaans om de twee jaar LTS-releases voor zijn .NET-frameworks aan, die worden geleverd met een verlengde ondersteuningsperiode van maximaal drie jaar. Deze LTS-releases zijn ideaal voor applicaties die stabiliteit en langdurige ondersteuning nodig hebben, omdat ze gedurende een langere periode beveiligingspatches, bugfixes en andere kritieke updates ontvangen.
Niet-LTS-releases, zoals .NET 7, hebben daarentegen doorgaans een kortere ondersteuningsperiode en zijn bedoeld voor gebruikers die willen profiteren van de nieuwste functies en verbeteringen, maar bereid zijn de afweging van een kortere ondersteuningsperiode te accepteren.
Daarom moet een bedrijf nadenken over de implicaties van het gebruik van een niet-LTS-release zoals .NET 7. Als ze langdurige ondersteuning voor hun applicatie nodig hebben, willen ze misschien wachten op de volgende LTS-release of een alternatief raamwerk overwegen dat langere ondersteuning biedt . Als ze echter prioriteit geven aan de nieuwste functies en verbeteringen, kan .NET 7 een geschikte keuze zijn voor hun project.
Andere bronnen:
- What’s new in Windows Forms in .NET 7.0 – .NET Blog (microsoft.com)
- Announcing .NET MAUI for .NET 7 General Availability – .NET Blog (microsoft.com)
- .NET 7 Performance Improvements in .NET MAUI – .NET Blog (microsoft.com)