.NET 7 è il successore di .NET 6 ed è un linguaggio unificato, moderno, semplice e veloce. .NET 7 sarà supportato per 18 mesi come versione STS (Standard Terms Support), precedentemente nota come versione corrente.
Questo articolo elenca le nuove funzionalità di .NET 7 e fornisce collegamenti a informazioni più dettagliate su ognuna di esse.
Le prestazioni sono un obiettivo fondamentale di .NET 7 e tutte le funzionalità sono progettate tenendo presente questo aspetto. .NET 7 include anche i miglioramenti seguenti destinati esclusivamente alle prestazioni:
La sostituzione nello stack (On-Stack Replacement, OSR) è un complemento alla compilazione a livelli. Consente al runtime di modificare il codice eseguito da un metodo mentre è in corso l'esecuzione, ovvero mentre è "nello stack". I metodi a esecuzione prolungata possono passare a versioni più ottimizzate durante l'esecuzione.
L'ottimizzazione PGO (Profile-Guided Optimization) ora funziona con la tecnologia OSR ed è più semplice da abilitare (aggiungendo <TieredPGO>true</TieredPGO> al file di progetto). L'ottimizzazione PGO può anche eseguire la strumentazione e l'ottimizzazione di altri elementi, ad esempio i delegati.
Miglioramento della generazione del codice per Arm64.
La funzionalità Native AOT genera un eseguibile autonomo nel formato di file della piattaforma di destinazione senza dipendenze esterne. È completamente nativo, senza IL o JIT, e offre tempi di avvio rapidi e una distribuzione autonoma di piccole dimensioni. In .NET 7, la funzionalità Native AOT è incentrata sulle app console e richiede che le app vengano tagliate.
Miglioramenti delle prestazioni al runtime di Mono, che supporta le app Blazor WebAssembly, Android e iOS.
Per un'analisi dettagliata di molte delle funzionalità incentrate sulle prestazioni che rendono .NET 7 così veloce, vedere il post di blog sui miglioramenti delle prestazioni in .NET 7 .
Serializzazione System.Text.Json
.NET 7 include miglioramenti alla serializzazione System.Text.Json nelle aree seguenti:
La personalizzazione dei contratti offre maggiore controllo sul modo in cui i tipi vengono serializzati e deserializzati. Per altre informazioni, vedere Personalizzare un contratto JSON.
Supporto per i membri obbligatori, ovvero proprietà che devono essere presenti nel payload JSON affinché la deserializzazione abbia esito positivo. Per altre informazioni, vedere Proprietà obbligatorie.
.NET 7 e C# 11 includono innovazioni che consentono di eseguire operazioni matematiche in modo generico, ovvero senza dover conoscere il tipo esatto in uso. Se, ad esempio, si vuole scrivere un metodo che aggiunge due numeri, in precedenza era necessario aggiungere un overload del metodo per ogni tipo. È ora possibile scrivere un singolo metodo generico, in cui il parametro di tipo è vincolato a un tipo simile a un numero. Per altre informazioni, vedere l'articolo Operazioni matematiche generiche e il post di blog relativo alle operazioni matematiche generiche.
Espressioni regolari
Nella libreria di espressioni regolari di .NET sono stati introdotti miglioramenti significativi delle prestazioni e funzionali per .NET 7:
La nuova opzione RegexOptions.NonBacktracking consente la corrispondenza usando un approccio che evita il backtracking e garantisce l'elaborazione in tempo lineare nella lunghezza dell'input. Il motore non backtracking non può essere usato in una ricerca da destra a sinistra e presenta alcune altre restrizioni, ma è veloce per tutte le espressioni regolari e gli input. Per altre informazioni, vedere Modalità non backtracking.
I generatori di origini delle espressioni regolari sono nuovi. I generatori di origini creano un motore ottimizzato per il modello personalizzato in fase di compilazione, offrendo vantaggi di prestazioni in termini di velocità effettiva. L'origine generata fa parte del progetto, quindi è possibile visualizzarla ed eseguirne il debug. Inoltre, un nuovo avviso di diagnostica SYSLIB1045 del generatore di origine indica le posizioni in cui vengono usate le espressioni regolari Regex che possono essere convertite nel generatore di origine. Per altre informazioni, vedere Generatori di origini di espressioni regolari .NET.
Per le ricerche senza distinzione tra maiuscole e minuscole, .NET 7 include miglioramenti di prestazioni elevati. I guadagni in termini di prestazioni derivano dal fatto che specificando RegexOptions.IgnoreCase non viene più chiamato ToLower per ogni carattere nel modello e per ogni carattere nell'input. Al contrario, tutte le operazioni correlate alla distinzione tra maiuscole e minuscole vengono eseguite quando viene costruito Regex.
Regex supporta ora gli intervalli per alcune API. I nuovi metodi seguenti sono stati aggiunti come parte di questo supporto:
Sono stati apportati molti miglioramenti alle API della libreria .NET. Alcuni sono menzionati in altre sezioni dedicate di questo articolo. Alcuni altri sono riepilogati nella tabella seguente.
Queste API significano che non è più necessario eseguire calcoli sul valore "tick" per determinare i valori di microsecondi e nanosecondi. Per altre informazioni, vedere il post di blog relativo a .NET 7 Preview 4.
API per la lettura, la scrittura, l'archiviazione e l'estrazione di archivi TAR
Stream.Read potrebbe restituire meno dati rispetto a quelli disponibili nel flusso. I nuovi metodi ReadExactly leggono esattamente il numero di byte richiesti e i nuovi metodi ReadAtLeast leggono almeno il numero di byte richiesti. Per altre informazioni, vedere il post di blog relativo a .NET 7 Preview 5.
Nuovi convertitori di tipi per DateOnly, TimeOnly, Int128, UInt128 e Half
I convertitori di tipi vengono spesso usati per convertire i tipi valore in una stringa e da una stringa. Queste nuove API aggiungono convertitori di tipi per i tipi aggiunti più di recente.
GetCurrentStatistics() consente di usare contatori eventi o API delle metriche per monitorare le statistiche per una o più cache di memoria. Per altre informazioni, vedere il post di blog relativo a .NET 7 Preview 4.
API per recuperare e impostare le autorizzazioni per i file Unix
Ad esempio, è possibile specificare che un parametro string prevede un'espressione regolare mediante l'attribuzione del parametro con [StringSyntax(StringSyntaxAttribute.Regex)].
API per l'interoperabilità con JavaScript durante l'esecuzione nel browser o in altre architetture WebAssembly
Le app JavaScript possono usare il supporto WebAssembly esteso in .NET 7 per riutilizzare le librerie .NET da JavaScript. Per altre informazioni, vedere Usare .NET da qualsiasi app JavaScript in .NET 7.
Osservabilità
.NET 7 apporta miglioramenti all'osservabilità. L'osservabilità consente di comprendere lo stato dell'app man mano che cresce e con l'aumentare della complessità tecnica. L'implementazione dell'osservabilità di .NET è basata principalmente su OpenTelemetry. I miglioramenti includono:
Il nuovo evento Activity.CurrentChanged, che è possibile usare per rilevare quando cambia il contesto dell'intervallo di un thread gestito.
Per altre informazioni, vedere il post di blog relativo a .NET 7 Preview 4.
.NET SDK
.NET 7 SDK migliora l'esperienza del modello dell'interfaccia della riga di comando. Consente anche la pubblicazione in contenitori e la gestione centrale dei pacchetti con NuGet.
Modelli
Sono stati apportati alcuni miglioramenti desiderati per il comando dotnet new e per la creazione di modelli.
dotnet new
Il comando dell'interfaccia della riga di comando dotnet new, che crea un nuovo progetto, un file di configurazione o una soluzione in base a un modello, supporta ora le funzionalità di completamento con tasto TAB per l'esplorazione:
Nomi di modelli disponibili
Opzioni modello
Valori di opzione consentiti
Inoltre, per una migliore conformità, i sottocomandi install, uninstall, search, list e update non hanno più il prefisso --.
Creazione
I vincoli del modello, un nuovo concetto per .NET 7, consentono di definire il contesto in cui sono consentiti i modelli. I vincoli consentono al motore dei modelli di determinare quali modelli devono essere visualizzati in comandi come dotnet new list. È possibile vincolare il modello a un sistema operativo, a un host del motore dei modelli (ad esempio, all'interfaccia della riga di comando di .NET o alla finestra di dialogo Nuovo progetto in Visual Studio) e a un carico di lavoro installato. I vincoli vengono definiti nel file di configurazione del modello.
Inoltre, nel file di configurazione del modello è ora possibile annotare un parametro del modello per consentire più valori. Ad esempio, il modello web consente più forme di autenticazione.
Per altre informazioni, vedere il post di blog relativo a .NET 7 Preview 6.
È ora possibile gestire le dipendenze comuni nei progetti da un'unica posizione usando la funzionalità di gestione pacchetti centrale (CPM) di NuGet. Per abilitarla, aggiungere un file Directory.Packages.props alla radice del repository. In questo file impostare la proprietà MSBuild ManagePackageVersionsCentrally su true e aggiungere versioni per le dipendenze comuni dei pacchetti usando gli elementi PackageVersion. Quindi, nei singoli file di progetto è possibile omettere gli attributi Version da qualsiasi elemento PackageReference che fa riferimento a pacchetti gestiti centralmente.
.NET 7 introduce un generatore di origini per platform invoke (P/Invoke) in C#. Il generatore di origini cerca LibraryImportAttribute nei metodi static, partial per attivare la generazione del codice di marshalling dell'origine in fase di compilazione. Generando il codice di marshalling in fase di compilazione, non è necessario generare uno stub IL in fase di esecuzione, come accade quando si usa DllImportAttribute. Il generatore di origini migliora le prestazioni dell'applicazione e consente anche la compilazione anticipata dell'app (AOT). Per altre informazioni, vedere Generazione di origini per platform invoke e Uso di gestori del marshalling personalizzati in P/Invoke generati dall'origine.
Versioni correlate
Questa sezione contiene informazioni sui prodotti correlati con versioni che coincidono con la versione di .NET 7.
C# 11 include il supporto per operazioni matematiche generiche, valori letterali stringa non elaborati, tipi con ambito file e altre nuove funzionalità. Per altre informazioni, vedere Novità di C# 11.
F# 7
F# 7 continua il percorso per semplificare il linguaggio e migliorare le prestazioni e l'interoperabilità con le nuove funzionalità di C#. Per altre informazioni, vedere Annuncio di F# 7.
.NET MAUI
.NET Multi-Platform App UI (.NET MAUI) è un framework multipiattaforma per la creazione di app native per dispositivi mobili e desktop con C# e XAML. Unifica le API Android, iOS, macOS e Windows in un'unica API. Per informazioni sugli aggiornamenti più recenti, vedere Novità di .NET MAUI per .NET 7.
ASP.NET Core
ASP.NET Core 7.0 include middleware di limitazione della frequenza, miglioramenti alle API minime e transcodifica JSON gRPC. Per informazioni su tutti gli aggiornamenti, vedere Novità di ASP.NET Core 7.
EF Core
Entity Framework Core 7.0 include il supporto indipendente dal provider per le colonne JSON, prestazioni migliorate per il salvataggio delle modifiche e modelli di reverse engineering personalizzati. Per informazioni su tutti gli aggiornamenti, vedere Novità di EF Core 7.0.
WinForms
In Windows Form per .NET 7 sono stati introdotti numerosi aggiornamenti. Sono stati apportati miglioramenti nelle aree seguenti:
WPF in .NET 7 include numerose correzioni di bug, nonché miglioramenti delle prestazioni e dell'accessibilità. Per altre informazioni, vedere il post di blog relativo alle novità di WPF per .NET 7 .
Orleans
Orleans è un framework multipiattaforma per la creazione di applicazioni distribuite affidabili e scalabili. Per informazioni sugli aggiornamenti più recenti per Orleans, vedere Eseguire la migrazione da Orleans 3.x a 7.0.
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback: