Novità di .NET 7
.NET 7 è il successore di .NET 6 e si concentra sull'essere unificato, moderno, semplice e veloce. .NET 7 sarà supportato per 18 mesi come versione di supporto standard (STS) (nota in precedenza come versione corrente di).
Questo articolo elenca le nuove funzionalità di .NET 7 e fornisce collegamenti a informazioni più dettagliate su ognuna.
Prestazione
Le prestazioni sono un obiettivo fondamentale di .NET 7 e tutte le relative funzionalità sono progettate tenendo presenti le prestazioni. .NET 7 include anche i miglioramenti seguenti destinati esclusivamente alle prestazioni:
- La sostituzione dello stack (OSR) è un complemento alla compilazione a livelli. Consente al runtime di modificare il codice eseguito da un metodo attualmente in esecuzione nel mezzo della sua 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 OSR ed è più semplice da abilitare (aggiungendo
<TieredPGO>true</TieredPGO>
al file di progetto). PGO può anche strumentare e ottimizzare funzionalità aggiuntive, come i delegati. - Miglioramento della generazione di codice per Arm64.
- AOT nativo produce 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, Native AOT è incentrato sulle app console e richiede che le app vengano tagliate.
- Miglioramenti delle prestazioni al runtime Mono, che alimenta le app Blazor WebAssembly, Android e iOS.
Per un'analisi dettagliata delle molte funzionalità incentrate sulle prestazioni che rendono .NET 7 tanto veloce, vedere il post di blog sui miglioramenti delle prestazioni di in .NET 7.
Serializzazione con System.Text.Json
.NET 7 include miglioramenti alla serializzazione System.Text.Json nelle aree seguenti:
- personalizzazione del contratto offre maggiore controllo sul modo in cui i tipi vengono serializzati e deserializzati. Per altre informazioni, vedere Personalizzare un contratto JSON.
- serializzazione polimorfica per le gerarchie di tipi definite dall'utente. Per altre informazioni, vedere Serializzare le proprietà delle classi derivate.
- Supporto per membri necessari, che sono proprietà che devono essere presenti nel payload JSON per la deserializzazione per avere esito positivo. Per altre informazioni, vedere Proprietà obbligatorie.
Per informazioni su questi e altri aggiornamenti, vedere il post di blog Novità di System.Text.Json in .NET 7.
Matematica generica
.NET 7 e C# 11 includono innovazioni che consentono di eseguire operazioni matematiche in modo generico, ovvero senza dover conoscere il tipo esatto con cui si sta lavorando. Ad esempio, se si vuole scrivere un metodo che somma due numeri, in passato 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 numerico. Per ulteriori informazioni, consultare l'articolo matematico generico e il post di blog generico matematico.
Espressioni regolari
. La libreria 'espressione regolare ha visto miglioramenti significativi delle prestazioni e funzionali in .NET 7:
La nuova opzione RegexOptions.NonBacktracking consente l'abbinamento utilizzando un approccio che evita il backtracking e garantisce un'elaborazione in tempo lineare rispetto alla lunghezza dell'input. Il motore di 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à Nonbacktracking.
I generatori di origine delle espressioni regolari sono nuovi. I generatori di origine creano un motore ottimizzato per modello di in fase di compilazione, offrendo vantaggi in termini di prestazioni della velocità effettiva. L'origine generata fa parte del progetto, quindi è possibile visualizzarla ed eseguirne il debug. Inoltre, un nuovo diagnostico del generatore di codice sorgente
SYSLIB1045
avvisa l'utente dei punti in cui si utilizza Regex che potrebbero essere convertiti nel generatore di codice sorgente. Per ulteriori informazioni, vedere generatori di codice sorgente delle espressioni regolari .NET.Per le ricerche senza distinzione tra maiuscole e minuscole, .NET 7 include miglioramenti di prestazioni elevati. I guadagni derivano dal fatto che specificando RegexOptions.IgnoreCase, ToLower non viene più invocato su ogni carattere del pattern e su ogni carattere di input. Al contrario, tutta la gestione delle maiuscole e minuscole viene effettuata quando viene costruito il Regex.
Regex ora supporta intervalli per alcune API. Nell'ambito di questo supporto sono stati aggiunti i nuovi metodi seguenti:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (e alcuni altri overload)
Per altre informazioni su questi e altri miglioramenti, vedere il post di blog 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. Altri sono riepilogati nella tabella seguente.
Descrizione | API | Ulteriori informazioni |
---|---|---|
Supporto per microsecondi e nanosecondi nei tipi TimeSpan, TimeOnly, DateTimee DateTimeOffset | - DateTime.Microsecond - DateTime.Nanosecond - DateTime.AddMicroseconds(Double) - Nuovi overloads per il costruttore DateTime - DateTimeOffset.Microsecond - DateTimeOffset.Nanosecond - DateTimeOffset.AddMicroseconds(Double) - Nuovi sovraccarichi 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 di "tick" per determinare i valori di microsecondi e nanosecondi. Per ulteriori informazioni, consultare il post del blog .NET 7 Preview 4. |
API per la lettura, la scrittura, l'archiviazione e l'estrazione di archivi Tar | System.Formats.Tar | Per ulteriori informazioni, vedere i post del blog .NET 7 Preview 4 e .NET 7 Preview 6. |
API di limitazione della frequenza per proteggere una risorsa mantenendo il traffico a livello sicuro | RateLimiter e altri nel pacchetto NuGet System.Threading.RateLimiting | Per altre informazioni, vedere Limitare la frequenza di un gestore HTTP in .NET e Annuncio del limite di frequenza per .NET. |
API per leggere tutti i dati da un Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read può restituire meno dati rispetto a quelli disponibili nel flusso. I nuovi metodi di ReadExactly leggono esattamente il numero di byte richiesti, e i nuovi metodi di ReadAtLeast leggono almeno il numero di byte richiesti. Per altre informazioni, vedere il post di blog .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 di valore in 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 i contatori eventi o le API delle metriche per tenere traccia delle statistiche per una o più cache di memoria. Per ulteriori informazioni, vedere il post del blog .NET 7 Preview 4. |
API per ottenere 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 .NET 7 Preview 7. |
Attributo per indicare il tipo di sintassi previsto in una stringa | StringSyntaxAttribute | Ad esempio, è possibile specificare che un parametro string prevede un'espressione regolare attribuendo il 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 espanso in .NET 7 per riutilizzare le librerie .NET da JavaScript. Per altre informazioni, consultare Usare .NET da qualsiasi app JavaScript in .NET 7. |
Osservabilità
.NET 7 apporta miglioramenti alla osservabilità. L'osservabilità consente di comprendere lo stato della tua app via via che scala e con l'incremento della complessità tecnica. L'implementazione dell'osservabilità di .NET è basata principalmente su OpenTelemetry. I miglioramenti includono:
- Il nuovo evento Activity.CurrentChanged, che puoi utilizzare per rilevare quando cambia il contesto di span di un thread gestito.
- Nuovi metodi enumeratori ad alte prestazioni per le proprietà Activity: EnumerateTagObjects(), EnumerateLinks()e EnumerateEvents().
Per ulteriori informazioni, vedere il post di blog .NET 7 Preview 4.
.NET SDK
La .NET 7
Modelli
Sono stati apportati alcuni miglioramenti di benvenuto al comando dotnet new
e alla creazione di modelli.
dotnet new
L'interfaccia a riga di comando dotnet new
, che crea un nuovo progetto, un file di configurazione o una soluzione basata su un modello, ora supporta il completamento automatico con tabulatore per l'esplorazione.
- Nomi di modello 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 --
.
Redazione
"I vincolidotnet new list
. È possibile vincolare il modello a un sistema operativo, a un host del motore di modelli (ad esempio, alla finestra di dialogo Interfaccia della riga di comando di .NET o 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 di modello in quanto consente più valori. Ad esempio, il modello di web
consente più forme di autenticazione.
Per ulteriori informazioni, vedere il post di blog .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 container sono ora un tipo di output supportato dello .NET SDK, ed è possibile creare versioni containerizzate delle tue applicazioni usando dotnet publish
. Per ulteriori informazioni sulla funzionalità, vedere Annunciando il supporto integrato dei contenitori per il .NET SDK. Per un tutorial, vedere "Containerizzare un'app .NET con dotnet publish" .
Gestione centrale dei pacchetti
È ora possibile gestire le dipendenze comuni nei progetti da un'unica posizione usando la funzionalità di gestione centrale dei pacchetti (CPM) di NuGet. Per abilitarlo, aggiungere un file Directory.Packages.props nella radice del repository. In questo file, imposta la proprietà MSBuild ManagePackageVersionsCentrally
su true
e aggiungi le versioni per le dipendenze comuni dei pacchetti utilizzando gli elementi PackageVersion
. Nei singoli file di progetto, è quindi possibile omettere gli attributi Version
da qualsiasi elemento PackageReference che faccia riferimento a pacchetti gestiti centralmente.
Per altre informazioni, vedere Central package management.
Generazione del codice sorgente P/Invoke
.NET 7 introduce un generatore di codice sorgente per invocazioni di piattaforma (P/Invokes) in C#. Il generatore di codice sorgente cerca LibraryImportAttribute su static
e partial
, metodi per attivare la generazione del codice sorgente durante la compilazione del codice di marshalling. Generando il codice di marshalling in fase di compilazione, non è necessario generare uno stub IL in fase di esecuzione, come accade invece usando DllImportAttribute. Il generatore di codice sorgente migliora le prestazioni dell'applicazione e consente anche la compilazione anticipata dell'applicazione (AOT). Per ulteriori informazioni, vedere Generazione del codice sorgente per le invocazioni di piattaforma e Utilizzare marshaller personalizzati nelle invocazioni P/Invoke generate dal codice sorgente.
Versioni correlate
Questa sezione contiene informazioni sui prodotti correlati che hanno 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 matematica generica, valori letterali stringa non elaborati, tipi con ambito file e altre nuove funzionalità. Per ulteriori informazioni, vedere la sezione 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à C#. Per altre informazioni, vedere Annuncio di F# 7.
.NET MAUI
.NET Multipiattaforma 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à in .NET MAUI per .NET 7.
ASP.NET Core
ASP.NET Core 7.0 comprende middleware per la limitazione della velocità, 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.
Windows Forms
Molto lavoro è stato dedicato a Windows Forms per .NET 7. Sono stati apportati miglioramenti nelle aree seguenti:
- Accessibilità
- Visualizzazione ad alta risoluzione e DPI elevati
- Databinding (associazione dati)
Per altre informazioni, vedere Novità di Windows Form in .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 Novità di WPF in .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 Migrare da Orleans 3.x a 7.0.
Assistente di aggiornamento .NET e CoreWCF
.NET Upgrade Assistant supporta ora l'aggiornamento delle app WCF sul lato server a CoreWCF, che è una porta creata dalla community di WCF a .NET (Core). Per ulteriori informazioni, vedere Aggiorna un progetto server-side WCF per usare CoreWCF.
ML.NET
ML.NET ora include un'API di classificazione del testo che semplifica il training di modelli di classificazione del testo personalizzati usando le tecniche di deep learning più recenti all'avanguardia. Per altre informazioni, vedere i post del blog Novità su AutoML e sugli strumenti e Introduzione all'API di classificazione del testo ML.NET.