Nyheter i .NET 7

.NET 7 är efterföljare till .NET 6 och fokuserar på att vara enhetlig, modern, enkel och snabb. .NET 7 kommer att stödjas i 18 månader som en STS-version (Standard Term Support) (tidigare känd som en aktuell version).

Den här artikeln visar de nya funktionerna i .NET 7 och innehåller länkar till mer detaljerad information om var och en.

Information om hur du hittar alla .NET-artiklar som har uppdaterats för .NET 7 finns i .NET-dokument: Nyheter för .NET 7-versionen.

Prestanda

Prestanda är ett viktigt fokus för .NET 7, och alla dess funktioner är utformade med prestanda i åtanke. Dessutom innehåller .NET 7 följande förbättringar som enbart syftar till prestanda:

  • Ersättning på stack (OSR) är ett komplement till nivåindelad kompilering. Det gör att körningen kan ändra koden som körs av en metod som körs mitt i körningen (det vill: medan den är "på stack"). Långvariga metoder kan växla till mer optimerade versioner mitt i körningen.
  • Profilstyrd optimering (PGO) fungerar nu med OSR och är enklare att aktivera (genom att lägga <TieredPGO>true</TieredPGO> till i projektfilen). PGO kan också instrumentera och optimera ytterligare saker, till exempel ombud.
  • Förbättrad kodgenerering för Arm64.
  • Intern AOT skapar en fristående körbar fil i målplattformens filformat utan externa beroenden. Det är helt inbyggt, utan IL eller JIT, och ger snabb starttid och en liten, fristående distribution. I .NET 7 fokuserar native AOT på konsolappar och kräver att appar trimmas.
  • Prestandaförbättringar för Mono-körningen, som driver Blazor WebAssembly-, Android- och iOS-appar.

En detaljerad titt på många av de prestandafokuserade funktioner som gör .NET 7 så snabbt finns i blogginlägget Prestandaförbättringar i .NET 7 .

System.Text.Json-serialisering

.NET 7 innehåller förbättringar av System.Text.Json-serialisering inom följande områden:

Information om dessa och andra uppdateringar finns i blogginlägget Nyheter i System.Text.Json i .NET 7 .

Allmän matematik

.NET 7 och C# 11 innehåller innovationer som gör att du kan utföra matematiska operationer generiskt , det vill sa, utan att behöva veta exakt vilken typ du arbetar med. Om du till exempel vill skriva en metod som lägger till två tal, var du tidigare tvungen att lägga till en överlagring av metoden för varje typ. Nu kan du skriva en enda allmän metod, där typparametern är begränsad till en talliknande typ. Mer information finns i artikeln Allmän matematik och blogginlägget Allmän matematik .

Reguljära uttryck

. NET:s bibliotek för reguljära uttryck har sett betydande funktions- och prestandaförbättringar i .NET 7:

  • Det nya alternativet RegexOptions.NonBacktracking möjliggör matchning med hjälp av en metod som undviker backtracking och garanterar linjär tidsbearbetning i längden på indata. Motorn för icke-bakåtspårning kan inte användas i en sökning från höger till vänster och har några andra begränsningar, men den är snabb för alla reguljära uttryck och indata. Mer information finns i Icke-bakåtspårningsläge.

  • Källgeneratorer för reguljära uttryck är nya. Källgeneratorer skapar en motor som är optimerad för ditt mönster vid kompileringstid, vilket ger prestandafördelar för dataflödet. Källan som genereras är en del av projektet, så du kan visa och felsöka den. Dessutom aviseras du av en ny källgeneratordiagnostik SYSLIB1045 till platser som du använder Regex som kan konverteras till källgeneratorn. Mer information finns i Källgeneratorer för reguljära .NET-uttryck.

  • För skiftlägeskänsliga sökningar innehåller .NET 7 stora prestandavinster. Vinsterna kommer eftersom du RegexOptions.IgnoreCase inte längre anger anrop ToLower för varje tecken i mönstret och på varje tecken i indata. I stället utförs allt höljerelaterat arbete när det Regex är konstruerat.

  • Regex stöder nu intervall för vissa API:er. Följande nya metoder har lagts till som en del av det här stödet:

Mer information om dessa och andra förbättringar finns i blogginlägget Förbättringar av reguljära uttryck i .NET 7 .

.NET-bibliotek

Många förbättringar har gjorts för .NET-biblioteks-API:er. Vissa nämns i andra, dedikerade avsnitt i den här artikeln. Vissa andra sammanfattas i följande tabell.

beskrivning API:er Mer information
Stöd för mikrosekunder och nanosekunder i TimeSpan, TimeOnly, DateTimeoch DateTimeOffset typer - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
– Nya DateTime konstruktoröverlagringar

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
– Nya DateTimeOffset konstruktoröverlagringar

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- Och andra...
Dessa API:er innebär att du inte längre behöver utföra beräkningar på "tick"-värdet för att fastställa värden för mikrosekunder och nanosekunder. Mer information finns i blogginlägget .NET 7 Preview 4 .
API:er för att läsa, skriva, arkivera och extrahera Tar-arkiv System.Formats.Tar Mer information finns i blogginläggen .NET 7 Preview 4 och .NET 7 Preview 6 .
Hastighetsbegränsning av API:er för att skydda en resurs genom att hålla trafiken på en säker nivå RateLimiteroch andra i NuGet-paketet System.Threading.RateLimiting Mer information finns i Hastighetsbegränsning för en HTTP-hanterare i .NET och Meddelande om hastighetsbegränsning för .NET.
API:er för att läsa alla data från en Stream - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read kan returnera mindre data än vad som är tillgängligt i dataströmmen. De nya ReadExactly metoderna läser exakt antalet begärda byte och de nya ReadAtLeast metoderna läser minst antalet begärda byte. Mer information finns i blogginlägget .NET 7 Preview 5 .
Nya typkonverterare för DateOnly, TimeOnly, Int128, UInt128och Half System.ComponentModel I namnområdet:

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
Typkonverterare används ofta för att konvertera värdetyper till och från en sträng. Dessa nya API:er lägger till typkonverterare för typer som har lagts till på senare tid.
Stöd för mått för IMemoryCache - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() låter dig använda händelseräknare eller mått-API:er för att spåra statistik för en eller flera minnescacheminnen. Mer information finns i blogginlägget .NET 7 Preview 4 .
API:er för att hämta och ange Unix-filbehörigheter - System.IO.UnixFileMode Enum
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
Mer information finns i blogginlägget .NET 7 Preview 7 .
Attribut som anger vilken typ av syntax som förväntas i en sträng StringSyntaxAttribute Du kan till exempel ange att en string parameter förväntar sig ett reguljärt uttryck genom att tillskriva parametern med [StringSyntax(StringSyntaxAttribute.Regex)].
API:er för att interop med JavaScript när de körs i webbläsaren eller andra WebAssembly-arkitekturer System.Runtime.InteropServices.JavaScript JavaScript-appar kan använda det utökade WebAssembly-stödet i .NET 7 för att återanvända .NET-bibliotek från JavaScript. Mer information finns i Använda .NET från valfri JavaScript-app i .NET 7.

Överskådlighet

.NET 7 gör förbättringar i observerbarheten. Observerbarhet hjälper dig att förstå appens tillstånd allt eftersom den skalas och när den tekniska komplexiteten ökar. . NET:s implementering av observerbarhet bygger främst på OpenTelemetry. Några viktiga förbättringar:

Mer information finns i blogginlägget .NET 7 Preview 4 .

.NET SDK

.NET 7 SDK förbättrar CLI-mallupplevelsen. Det möjliggör också publicering till containrar och central pakethantering med NuGet.

Mallar

Vissa välkomna förbättringar har gjorts i dotnet new kommandot och mallredigeringen.

dotnet new

dotnet new CLI-kommandot, som skapar ett nytt projekt, en konfigurationsfil eller en lösning baserad på en mall, har nu stöd för att slutföra fliken för att utforska:

  • Tillgängliga mallnamn
  • Mallalternativ
  • Tillåtna alternativvärden

För bättre överensstämmelse installhar dessutom underkommandona , uninstall, search, listoch update inte längre prefixet -- .

Redigering

Med mallbegränsningar, ett nytt begrepp för .NET 7, kan du definiera den kontext där dina mallar tillåts. Begränsningar hjälper mallmotorn att avgöra vilka mallar som ska visas i kommandon som dotnet new list. Du kan begränsa mallen till ett operativsystem, en mallmotorvärd (till exempel dialogrutan .NET CLI eller Nytt projekt i Visual Studio) och en installerad arbetsbelastning. Du definierar begränsningar i mallens konfigurationsfil.

Även i mallkonfigurationsfilen kan du nu kommentera en mallparameter som tillåter flera värden. Mallen web tillåter till exempel flera former av autentisering.

Mer information finns i blogginlägget .NET 7 Preview 6 .

Publicera till en container

Containrar är ett av de enklaste sätten att distribuera och köra en mängd olika program och tjänster i molnet. Containeravbildningar är nu en utdatatyp som stöds för .NET SDK och du kan skapa containerbaserade versioner av dina program med .dotnet publish Mer information om funktionen finns i Meddelande om inbyggt containerstöd för .NET SDK. En självstudiekurs finns i Containerisera en .NET-app med dotnet publish.

Central pakethantering

Nu kan du hantera vanliga beroenden i dina projekt från en plats med hjälp av NuGets CPM-funktion (Central Package Management). Om du vill aktivera den lägger du till en Directory.Packages.props-fil i roten på lagringsplatsen. I den här filen anger du egenskapen ManagePackageVersionsCentrally MSBuild till och lägger till true versioner för vanligt paketberoende med hjälp av PackageVersion objekt. I de enskilda projektfilerna kan du sedan utelämna Version attribut från alla PackageReference-objekt som refererar till centralt hanterade paket.

Mer information finns i Central pakethantering.

P/Invoke-källgenerering

.NET 7 introducerar en källgenerator för plattformsanrop (P/Invokes) i C#. Källgeneratorn söker efter metoder staticpartial för LibraryImportAttribute att utlösa kompileringstidskällans generation av marshallingkod. Genom att generera marshallingkoden vid kompileringstiden behöver ingen IL-stub genereras vid körning, som när du använder DllImportAttribute. Källgeneratorn förbättrar programmets prestanda och gör även att appen kan kompileras i förväg (AOT). Mer information finns i Källgenerering för plattformsanrop och Använda anpassade marshallers i källgenererade P/Invokes.

Det här avsnittet innehåller information om relaterade produkter som har versioner som sammanfaller med .NET 7-versionen.

Visual Studio 2022 version 17.4

Mer information finns i Nyheter i Visual Studio 2022.

C# 11

C# 11 innehåller stöd för allmän matematik, råa strängliteraler, filomfattningstyper och andra nya funktioner. Mer information finns i Nyheter i C# 11.

F# 7

F# 7 fortsätter resan för att göra språket enklare och förbättra prestanda och interop med nya C#-funktioner. Mer information finns i Meddelande f# 7.

.NET MAUI

.NET Multi-platform App UI (.NET MAUI) är ett plattformsoberoende ramverk för att skapa interna mobil- och skrivbordsappar med C# och XAML. Det förenar Android-, iOS-, macOS- och Windows-API:er till ett enda API. Information om de senaste uppdateringarna finns i Nyheter i .NET MAUI för .NET 7.

ASP.NET Core

ASP.NET Core 7.0 innehåller hastighetsbegränsande mellanprogram, förbättringar av minimala API:er och gRPC JSON-transkodning. Information om alla uppdateringar finns i Nyheter i ASP.NET Core 7.

EF Core

Entity Framework Core 7.0 innehåller provideragnostiskt stöd för JSON-kolumner, bättre prestanda för att spara ändringar och anpassade bakåtkompileringsmallar. Information om alla uppdateringar finns i Nyheter i EF Core 7.0.

Windows Forms

Mycket arbete har gjorts i Windows Forms för .NET 7. Förbättringar har gjorts på följande områden:

  • Tillgänglighet
  • Hög DPI och skalning
  • Databindning

Mer information finns i Nyheter i Windows Forms i .NET 7.

WPF

WPF i .NET 7 innehåller många felkorrigeringar samt prestanda- och tillgänglighetsförbättringar. Mer information finns i blogginlägget Nyheter för WPF i .NET 7 .

Orleans

Orleans är ett plattformsoberoende ramverk för att skapa robusta, skalbara distribuerade program. Information om de senaste uppdateringarna för Orleansfinns i Migrera från Orleans 3.x till 7.0.

.NET Upgrade Assistant och CoreWCF

.NET Upgrade Assistant stöder nu uppgradering av WCF-appar på serversidan till CoreWCF, som är en community-skapad port för WCF till .NET (Core). Mer information finns i Uppgradera ett WCF-projekt på serversidan för att använda CoreWCF.

ML.NET

ML.NET innehåller nu ett API för textklassificering som gör det enkelt att träna anpassade textklassificeringsmodeller med hjälp av de senaste toppmoderna djupinlärningsteknikerna. Mer information finns i blogginläggen Nyheter med AutoML och verktyg och Introduktion till API:et ML.NET textklassificering .

Se även