Dela via


Nyheter i .NET 7

.NET 7 är efterföljare till .NET 6 och fokuserar på att vara enhetlig, modern, enkel och snabb. .NET 7 stöds i 18 månader som en STS-version (Standard Term Support) (tidigare kallat 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.

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:

  • On-stack ersättning (OSR) är ett komplement till nivåindelad kompilering. Det gör att körmiljön kan ändra koden som körs av en metod som redan körs mitt under dess körning (det vill säga, medan den är "på stacken"). 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 till <TieredPGO>true</TieredPGO> i projektfilen). PGO kan också instrumentera och optimera ytterligare saker, till exempel delegater.
  • Förbättrad kodgenerering för Arm64.
  • Interna 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 i Mono-runtime, som stödjer 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:

  • Anpassning av kontrakt ger dig mer kontroll över hur datatyper serialiseras och deserialiseras. Mer information finns i Anpassa ett JSON-kontrakt.
  • polymorfisk serialisering för användardefinierade typhierarkier. Mer information finns i Serialisera egenskaper för härledda klasser.
  • Stöd för de nödvändiga medlemmarna i ,, som är egenskaper som måste finnas i JSON-nyttolasten för att deserialiseringen ska lyckas. Mer information finns i Obligatoriska egenskaper.

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 Generic math och blogginlägget Generic math.

Reguljära uttryck

. NET:s reguljära uttryck biblioteket 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 bygger en motor som är optimerad för ditt mönster vid kompilering, vilket ger förbättringar i genomflödesprestanda. Källan som genereras är en del av projektet, så du kan visa och felsöka den. Dessutom varnar en ny diagnostik från källgeneratorn SYSLIB1045 dig om platser där du använder Regex som kan konverteras till en källgenerator. Mer information finns i .NET regular expression source generators.

  • För icke skiftlägeskänsliga sökningar ger .NET 7 stora prestandavinster. Vinsterna kommer eftersom att specificera RegexOptions.IgnoreCase inte längre anropar ToLower för varje tecken i mönstret och för varje tecken i indata. I stället utförs allt arbete som rör kapsling när Regex skapas.

  • 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 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 typerna TimeSpan, TimeOnly, DateTimeoch DateTimeOffset - 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å RateLimiter och andra i System.Threading.RateLimiting NuGet-paketet Mer information finns i Rate limit an HTTP handler in .NET och Announcing rate limiting for .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 strö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 I namnområdet System.ComponentModel:

- 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.
Måttstöd för IMemoryCache - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() gör det möjligt att använda händelseräknare eller mät-API:er för att spåra statistik för en eller flera minnescache. 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 tilldela parametern med [StringSyntax(StringSyntaxAttribute.Regex)].
API:er för att interagera med JavaScript när det körs i webbläsaren eller andra WebAssembly-plattformar 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.

Observerbarhet

.NET 7 förbättrar :s observerbarhet. 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. Förbättringarna omfattar:

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 kommandot dotnet new och mallredigering.

dotnet new

Kommandot dotnet new CLI, som skapar ett nytt projekt, en konfigurationsfil eller en lösning baserat på en mall, stöder nu tabbavslut för att utforska:

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

För bättre överensstämmelse har install, uninstall, search, listoch update underkommandon inte längre -- prefixet.

Författande

Begränsningar för mall , ett nytt koncept för .NET 7, låter dig 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. Till exempel tillåter web-mallen flera former av autentisering.

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

Publicera till en behållare

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 hjälp av dotnet publish. För mer information om funktionen, se Tillkännager inbyggt containerstöd för .NET SDK. För en handledning, se Containerize a .NET app with 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 ska du sätta MSBuild-egenskapen ManagePackageVersionsCentrally till true och lägga till versioner för vanliga paketberoenden 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ällkodsgenerering

.NET 7 introducerar en källgenerator för plattformsanrop (P/Invokes) i C#. Källgeneratorn letar efter LibraryImportAttributestatic-, partial-metoder för att aktivera källgenerering av marshallingkod vid kompilering. Genom att generera marshallingkoden vid kompileringstid behöver ingen IL-stub genereras vid körning, som när man använder DllImportAttribute. Källgeneratorn förbättrar programmets prestanda och gör även att appen kan kompileras i förväg (AOT). För mer information, se Källgenerering för plattformsanrop och Använd anpassade marshals 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 generisk matematik, råsträngsliteraler, filomfattande typer och andra nya funktioner. För mer information, se 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 Announcing 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. För information om de senaste uppdateringarna, se 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-formulär

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 Nyheter med AutoML och verktyg och Introduktion till api:et för ML.NET textklassificering blogginlägg.

Se även