Delen via


Nieuw in .NET 7

.NET 7 is de opvolger van .NET 6 en richt zich op uniforme, moderne, eenvoudige en snelle. .NET 7 wordt ondersteund voor 18 maanden als een STS-release (ondersteuning voor een standaardtermijn) (voorheen bekend als een huidige release).

In dit artikel vindt u een overzicht van de nieuwe functies van .NET 7 en vindt u koppelingen naar gedetailleerdere informatie.

Prestatie

Prestaties is een belangrijke focus op .NET 7 en alle functies zijn ontworpen met de prestaties in het achterhoofd. Daarnaast bevat .NET 7 de volgende verbeteringen die uitsluitend gericht zijn op prestaties:

  • On-stack vervanging (OSR) is een aanvulling op gelaagde compilatie. Hiermee kan de runtime de code wijzigen die wordt uitgevoerd door een momenteel actieve methode in het midden van de uitvoering (dat wil gezegd, terwijl deze 'op stapel' staat). Langlopende methoden kunnen overschakelen naar meer geoptimaliseerde versies tijdens de uitvoering.
  • PGO (Profile-Guided Optimization) werkt nu met OSR en is eenvoudiger in te schakelen (door <TieredPGO>true</TieredPGO> toe te voegen aan uw projectbestand). PGO kan ook aanvullende dingen instrumenteren en optimaliseren, zoals delegates.
  • Verbeterde codegeneratie voor Arm64.
  • Native AOT- produceert een zelfstandig uitvoerbaar bestand in de bestandsindeling van het doelplatform zonder externe afhankelijkheden. Het is volledig systeemeigen, zonder IL of JIT en biedt snelle opstarttijd en een kleine, zelfstandige implementatie. In .NET 7 richt Native AOT zich op console-apps en moeten apps worden ingekort.
  • Prestatieverbeteringen in de Mono-runtime, die Blazor WebAssembly-, Android- en iOS-apps mogelijk maakt.

Voor een gedetailleerd overzicht van veel van de prestatiegerichte functies die .NET 7 zo snel maken, raadpleegt u de Prestatieverbeteringen in .NET 7 blogbericht.

System.Text.Json serialisatie

.NET 7 bevat verbeteringen in System.Text.Json-serialisatie op de volgende gebieden:

  • Contractaanpassing biedt u meer controle over hoe datatypen worden geserialiseerd en gedeserialiseerd. Zie Een JSON-contract aanpassenvoor meer informatie.
  • polymorfe serialisatie voor door de gebruiker gedefinieerde typehiërarchieën. Zie Eigenschappen van afgeleide klassen serialiserenvoor meer informatie.
  • Ondersteuning voor vereiste leden. Dit zijn eigenschappen die aanwezig moeten zijn in de JSON-nettolading om deserialisatie te voltooien. Zie Vereiste eigenschappenvoor meer informatie.

Zie de Wat is er nieuw in System.Text.Json in .NET 7 blogbericht voor informatie over deze en andere updates.

Algemene wiskunde

.NET 7 en C# 11 bevatten innovaties waarmee u algemene wiskundige bewerkingen kunt uitvoeren, dat wil zeggen, zonder dat u het exacte type hoeft te kennen waarmee u werkt. Als u bijvoorbeeld een methode wilt schrijven waarmee twee getallen worden opgetellen, moest u eerder een overbelasting van de methode voor elk type toevoegen. U kunt nu één algemene methode schrijven, waarbij de typeparameter is beperkt tot een getalachtig type. Zie het artikel Algemene wiskundige en het blogbericht Algemeen wiskunde voor meer informatie.

Reguliere expressies

De .NET reguliere expressies bibliotheek heeft aanzienlijke functionele en prestatieverbeteringen gezien in .NET 7:

  • De nieuwe optie RegexOptions.NonBacktracking maakt vergelijking mogelijk met behulp van een benadering die backtracking voorkomt en lineaire tijdverwerking garandeert in de lengte van de invoer. De niet-backtracking-engine kan niet worden gebruikt in een zoekactie van rechts naar links en kent nog enkele andere beperkingen, maar is snel voor alle reguliere expressies en invoer. Zie Niet-backtrackingmodusvoor meer informatie.

  • Brongeneratoren voor reguliere expressies zijn nieuw. Brongenerators bouwen een engine die is geoptimaliseerd voor uw patroon tijdens de compilatie, en verbeteren de doorvoerprestaties. De bron die wordt verzonden, maakt deel uit van uw project, zodat u deze kunt bekijken en fouten kunt opsporen. Daarnaast waarschuwt een nieuwe diagnostische brongenerator SYSLIB1045 u op plaatsen waar u Regex gebruikt die kunnen worden geconverteerd naar de brongenerator. Zie .NET-brongeneratoren voor reguliere expressiesvoor meer informatie.

  • Voor niet-hoofdlettergevoelige zoekopdrachten bevat .NET 7 grote prestatieverbeteringen. De voordelen komen omdat het specificeren van RegexOptions.IgnoreCase niet langer ToLower aanroept op elk teken in het patroon en op elk teken in de invoer. In plaats daarvan wordt alle werkzaamheden die te maken hebben met het omhulsel uitgevoerd wanneer de Regex wordt geconstrueerd.

  • Regex ondersteunt nu spans voor sommige API's. De volgende nieuwe methoden zijn toegevoegd als onderdeel van deze ondersteuning:

Zie de Verbeteringen voor reguliere expressies in .NET 7 blogbericht voor meer informatie over deze en andere verbeteringen.

.NET-bibliotheken

Er zijn veel verbeteringen aangebracht in .NET-bibliotheek-API's. Sommige worden vermeld in andere, speciale secties van dit artikel. Sommige andere worden samengevat in de volgende tabel.

Beschrijving API's Meer informatie
Ondersteuning voor microseconden en nanoseconden in TimeSpan, TimeOnly, DateTimeen DateTimeOffset - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- Nieuwe DateTime constructor overbelast

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- Nieuwe DateTimeOffset constructor overbelast

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- En anderen...
Deze API's betekenen dat u geen berekeningen meer hoeft uit te voeren op de 'tick'-waarde om microseconde- en nanosecondewaarden te bepalen. Zie de blogpost .NET 7 Preview 4 voor meer informatie.
API's voor het lezen, schrijven, archiveren en extraheren van Tar-archieven System.Formats.Tar Zie de blogberichten .NET 7 Preview 4 en .NET 7 Preview 6 voor meer informatie.
Frequentiebeperking van API's om een resource te beveiligen door verkeer op een veilig niveau te houden RateLimiter en anderen in het System.Threading.RateLimiting NuGet-pakket Voor meer informatie, zie "Rate limit an HTTP handler in .NET" en "Announcing rate limiting for .NET".
API's voor het lezen van alle gegevens uit een Stream - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read retourneert mogelijk minder gegevens dan wat er beschikbaar is in de stream. De nieuwe ReadExactly methoden lezen exact het aantal aangevraagde bytes en de nieuwe ReadAtLeast methoden lezen ten minste het aantal aangevraagde bytes. Zie de blogpost .NET 7 Preview 5 voor meer informatie.
Nieuwe type converters voor DateOnly, TimeOnly, Int128, UInt128en Half In de System.ComponentModel naamruimte:

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
Typeconversieprogramma's worden vaak gebruikt om waardetypen naar en van een tekenreeks te converteren. Deze nieuwe API's voegen typeconversieprogramma's toe voor typen die onlangs zijn toegevoegd.
Ondersteuning voor metrische gegevens voor IMemoryCache - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() kunt u gebeurtenistellers of API's voor metrische gegevens gebruiken om statistieken bij te houden voor een of meer geheugencaches. Zie de blogpost .NET 7 Preview 4 voor meer informatie.
API's voor het ophalen en instellen van Unix-bestandsmachtigingen - System.IO.UnixFileMode opsomming
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
Zie de blogpost .NET 7 Preview 7 voor meer informatie.
Kenmerk om aan te geven wat voor soort syntaxis er wordt verwacht in een tekenreeks StringSyntaxAttribute U kunt bijvoorbeeld opgeven dat een string parameter een reguliere expressie verwacht door de parameter toe te rekenen aan [StringSyntax(StringSyntaxAttribute.Regex)].
API's voor interoperabiliteit met JavaScript bij uitvoering in de browser of andere WebAssembly-architecturen System.Runtime.InteropServices.JavaScript JavaScript-apps kunnen de uitgebreide webassembly-ondersteuning in .NET 7 gebruiken om .NET-bibliotheken opnieuw te gebruiken vanuit JavaScript. Zie .NET gebruiken vanuit een JavaScript-app in .NET 7voor meer informatie.

Observeerbaarheid

.NET 7 maakt verbeteringen aan waarneembaarheid. Waarneembaarheid helpt u inzicht te hebben in de status van uw app wanneer deze wordt geschaald en naarmate de technische complexiteit toeneemt. . De waarneembaarheidsimplementatie van NET is voornamelijk gebouwd rond OpenTelemetry. Verbeteringen zijn onder andere:

Zie de blogpost .NET 7 Preview 4 voor meer informatie.

.NET SDK

De .NET 7 SDK verbetert de CLI-sjabloonervaring. Het maakt het ook mogelijk om te publiceren naar containers en centraal pakketbeheer met NuGet.

Sjablonen

Er zijn enkele welkomstverbeteringen aangebracht in de opdracht dotnet new en het ontwerpen van sjablonen.

dotnet nieuw

De dotnet new CLI-opdracht waarmee een nieuw project, configuratiebestand of een nieuwe oplossing wordt gemaakt op basis van een sjabloon, ondersteunt nu voltooiing van tabbladen voor verkennen:

  • Beschikbare sjabloonnamen
  • Sjabloonopties
  • Toegestane optiewaarden

Bovendien hebben de install, uninstall, search, listen update subopdrachten niet langer het voorvoegsel --.

Opstellen

Met sjabloon beperkingen, een nieuw concept voor .NET 7, kunt u de context definiëren waarin uw sjablonen zijn toegestaan. Beperkingen helpen de sjabloonengine te bepalen welke sjablonen moeten worden weergegeven in opdrachten zoals dotnet new list. U kunt uw sjabloon beperken tot een besturingssysteem, een sjabloon-enginehost (bijvoorbeeld het dialoogvenster .NET CLI of het dialoogvenster Nieuw project in Visual Studio) en een geïnstalleerde workload. U definieert beperkingen in het configuratiebestand van uw sjabloon.

Ook in het sjabloonconfiguratiebestand kunt u nu aantekeningen toevoegen aan een sjabloonparameter omdat meerdere waarden zijn toegestaan. De web-sjabloon bijvoorbeeld meerdere verificatievormen toestaat.

Zie de blogpost .NET 7 Preview 6 voor meer informatie.

Publiceren in een container

Containers zijn een van de eenvoudigste manieren om een groot aantal toepassingen en services in de cloud te distribueren en uit te voeren. Containerafbeeldingen zijn nu een ondersteund uitvoertype van de .NET SDK, en u kunt gecontaineriseerde versies van uw toepassingen maken met behulp van dotnet publish. Zie Aankondiging van ingebouwde containerondersteuning voor de .NET SDK-voor meer informatie over de functie. Zie Een .NET-app containeriseren met dotnet publishvoor een zelfstudie.

Centraal pakketbeheer

U kunt nu algemene afhankelijkheden in uw projecten beheren vanaf één locatie met behulp van de CPM-functie (Central Package Management) van NuGet. Als u dit wilt inschakelen, voegt u een Directory.Packages.props-bestand toe aan de hoofdmap van uw opslagplaats. In dit bestand stelt u de eigenschap MSBuild ManagePackageVersionsCentrally in op true en voegt u versies toe voor algemene pakketafhankelijkheid met behulp van PackageVersion items. Vervolgens kunt u in de afzonderlijke projectbestanden Version kenmerken weglaten uit alle PackageReference items die verwijzen naar centraal beheerde pakketten.

Zie Central-pakketbeheervoor meer informatie.

P/Brongeneratie aanroepen

.NET 7 introduceert een brongenerator voor platform-aanroepen (P/Invokes) in C#. De brongenerator zoekt naar LibraryImportAttribute op staticen partial-methoden om het genereren van marshallcode tijdens de compilatie te activeren. Door de marshallcode tijdens het compileren te genereren, hoeft er tijdens runtime geen IL-stub te worden gegenereerd, net als bij het gebruik van DllImportAttribute. De brongenerator verbetert de prestaties van de toepassing en stelt de app ook in staat om vooraf (AOT) te worden gecompileerd. Voor meer informatie, zie Brongeneratie voor platformaanroepen en Aangepaste marshallers gebruiken in door de bron gegenereerde P/Invokes.

Deze sectie bevat informatie over gerelateerde producten met releases die samenvallen met de .NET 7-release.

Visual Studio 2022 versie 17.4

Zie Wat is er nieuw in Visual Studio 2022voor meer informatie.

C# 11

C# 11 bevat ondersteuning voor generieke wiskunde, ruwe letterlijke tekenreeksen, bestandsgeschapte typen en andere nieuwe functies. Zie Wat is er nieuw in C# 11voor meer informatie.

F# 7

F# 7 gaat verder met het traject om de taal eenvoudiger te maken en de prestaties en interop met nieuwe C#-functies te verbeteren. Zie Aankondiging van F# 7voor meer informatie.

.NET MAUI

.NET Multi-Platform App UI (.NET MAUI) is een platformoverschrijdend framework voor het maken van systeemeigen mobiele en desktop-apps met C# en XAML. Het integreert Android-, iOS-, macOS- en Windows-API's in één API. Zie Wat is er nieuw in .NET MAUI voor .NET 7voor informatie over de nieuwste updates.

ASP.NET Core

ASP.NET Core 7.0 bevat snelheidsbeperking middleware, verbeteringen in minimale API's en gRPC JSON-transcodering. Zie Wat is er nieuw in ASP.NET Core 7voor meer informatie over alle updates.

EF Core

Entity Framework Core 7.0 bevat provideragnostische ondersteuning voor JSON-kolommen, verbeterde prestaties voor het opslaan van wijzigingen en aangepaste reverse-engineeringsjablonen. Zie Wat is er nieuw in EF Core 7.0voor meer informatie over alle updates.

Windows Forms

Er is veel werk verricht in Windows Forms voor .NET 7. Er zijn verbeteringen aangebracht op de volgende gebieden:

  • Toegankelijkheid
  • Hoge DPI en schaalvergroting
  • Gegevensbinding

Zie Wat is er nieuw in Windows Forms in .NET 7voor meer informatie.

WPF (Windows Presentation Foundation)

WPF in .NET 7 bevat tal van bugfixes, evenals prestatie- en toegankelijkheidsverbeteringen. Zie de Wat is er nieuw voor WPF in .NET 7 blogbericht voor meer informatie.

Orleans

Orleans is een platformoverschrijdend framework voor het bouwen van robuuste, schaalbare gedistribueerde toepassingen. Zie Migreren van Orleans 3.x naar 7.0voor meer informatie over de meest recente updates voor Orleans.

.NET Upgrade Assistant en CoreWCF

De .NET Upgrade Assistant ondersteunt nu het upgraden van WCF-apps aan de serverzijde naar CoreWCF-, een door de community gemaakte poort van WCF naar .NET (Core). Zie Een WCF-serverproject upgraden om CoreWCF-te gebruiken voor meer informatie.

ML.NET

ML.NET bevat nu een API voor tekstclassificatie waarmee u eenvoudig aangepaste modellen voor tekstclassificatie kunt trainen met behulp van de nieuwste geavanceerde deep learning-technieken. Zie de Wat is er nieuw met AutoML en hulpprogramma's en Introductie van de ML.NET Text Classification-API blogberichten voor meer informatie.

Zie ook