Novità di .NET 7

.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.

Per trovare tutti gli articoli relativi a .NET aggiornati per .NET 7, vedere la documentazione di .NET: Novità della versione .NET 7.

Prestazioni

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.
  • Serializzazione polimorfica per gerarchie di tipi definite dall'utente. Per altre informazioni, vedere Serializzare le proprietà delle classi derivate.
  • 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.

Per informazioni su questi e altri aggiornamenti, vedere il post di blog relativo alle novità di System.Text.Json in .NET 7 .

Operazioni matematiche generiche

.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:

Per altre informazioni su questi e altri miglioramenti, vedere il post di blog relativo ai miglioramenti delle espressioni regolari in .NET 7.

Librerie .NET

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.

Descrizione API Ulteriori informazioni
Supporto per microsecondi e nanosecondi nei tipi TimeSpan, TimeOnly, DateTime e DateTimeOffset - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- Nuovi overload del costruttore DateTime

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- Nuovi overload del costruttore DateTimeOffset

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- E altri...
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 System.Formats.Tar Per altre informazioni, vedere i post di blog relativi a .NET 7 Preview 4 e .NET 7 Preview 6.
API di limitazione della frequenza per proteggere una risorsa mantenendo il traffico a un livello sicuro RateLimiter e altre nel pacchetto NuGet System.Threading.RateLimiting Per altre informazioni, vedere Limitare la frequenza di un gestore HTTP in .NET e Annuncio della limitazione della frequenza per .NET.
API per la lettura di tutti i dati da un oggetto Stream - Stream.ReadExactly
- Stream.ReadAtLeast
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 Nello spazio dei nomi System.ComponentModel:

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
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.
Supporto delle metriche per IMemoryCache - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
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 Enumerazione - System.IO.UnixFileMode
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
Per altre informazioni, vedere il post di blog relativo a .NET 7 Preview 7.
Attributo per indicare la tipologia di sintassi prevista in una stringa StringSyntaxAttribute 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 System.Runtime.InteropServices.JavaScript 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:

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.

Pubblicare in un contenitore

I contenitori sono uno dei modi più semplici per distribuire ed eseguire un'ampia gamma di applicazioni e servizi nel cloud. Le immagini del contenitore sono ora un tipo di output supportato di .NET SDK ed è possibile creare versioni in contenitori delle applicazioni usando dotnet publish. Per altre informazioni sulla funzionalità, vedere Annuncio del supporto dei contenitori predefinito per .NET SDK. Per un'esercitazione, vedere Containerizzare un'app .NET con dotnet publish.

Gestione pacchetti centrale

È 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.

Per altre informazioni, vedere Gestione pacchetti centrale.

Generazione di origini P/Invoke

.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.

Questa sezione contiene informazioni sui prodotti correlati con versioni che coincidono con la versione di .NET 7.

Visual Studio 2022 versione 17.4

Per altre informazioni, vedere Novità di Visual Studio 2022.

C# 11

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:

  • Accessibilità
  • DPI e scalabilità elevati
  • Data binding

Per altre informazioni, vedere Novità di Windows Forms per .NET 7.

WPF

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.

.NET Upgrade Assistant e CoreWCF

.NET Upgrade Assistant ora supporta l'aggiornamento delle app WCF lato server a CoreWCF, ovvero una porta creata dalla community di WCF per .NET (Core). Per altre informazioni, vedere Aggiornare un progetto WCF lato server per l'uso di CoreWCF.

ML.NET

ML.NET ora include un'API di classificazione del testo che semplifica il training di modelli di classificazione personalizzata del testo usando le più recenti tecniche di deep learning all'avanguardia. Per altre informazioni, vedere i post di blog relativi alle novità di AutoML e degli strumenti e alla presentazione dell'API di classificazione del testo ML.NET.

Vedi anche