Formazione
Modulo
Sicurezza dei valori Null in C # - Training
Informazioni sulle procedure di codifica per impedire l'occorrenza di NullReferenceException.
Questo browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
.NET 6 offre le parti finali del piano di unificazione .NET avviato con .NET 5. .NET 6 unifica l'SDK, le librerie di base e il runtime tra app per dispositivi mobili, desktop, IoT e cloud. Oltre a questa unificazione, l'ecosistema .NET 6 offre:
Sviluppo semplificato: Iniziare è facile. Nuove funzionalità del linguaggio in C# 10 ridurranno la quantità di codice da scrivere. Gli investimenti nello stack Web e nelle API minime semplificano la scrittura di microservizi più piccoli e veloci.
prestazioni migliori: .NET 6 è il framework Web dello stack completo più veloce, che riduce i costi di calcolo se si esegue nel cloud.
produttività Ultimate: .NET 6 e Visual Studio 2022 forniscono ricaricamento rapido, nuovi strumenti Git, modifica intelligente del codice, strumenti di diagnostica e test affidabili e una migliore collaborazione tra team.
.NET 6 sarà supportato per tre anni come versione di supporto a lungo termine (LTS).
funzionalità di anteprima sono disabilitate per impostazione predefinita. Non sono supportate anche per l'uso nell'ambiente di produzione e possono essere rimosse in una versione futura. La nuova RequiresPreviewFeaturesAttribute viene utilizzata per annotare le API di anteprima e un analizzatore associato ti avvisa se utilizzi queste API di anteprima.
.NET 6 è supportato da Visual Studio 2022 e versioni successive.
Questo articolo non illustra tutte le nuove funzionalità di .NET 6. Per visualizzare tutte le nuove funzionalità e per altre informazioni sulle funzionalità elencate in questo articolo, vedere il post di blog Annunciando .NET 6.
.NET 6 include numerosi miglioramenti delle prestazioni. Questa sezione elenca alcuni dei miglioramenti apportati a FileStream, ottimizzazione guidata dal profiloe compilazione AOT. Per informazioni dettagliate, vedere il post di blog Miglioramenti delle prestazioni in .NET 6.
Il tipo System.IO.FileStream è stato riscritto per .NET 6 per offrire prestazioni e affidabilità migliori in Windows. Ora, FileStream non si blocca mai quando viene creato per le operazioni di I/O asincrone in Windows. Per altre informazioni, vedere il post di blog Miglioramenti dell'I/O dei file in .NET 6.
L'ottimizzazione guidata dal profilo (PGO, Profile-Guided Optimization) è un processo in cui il compilatore JIT genera codice ottimizzato basato sui tipi e sui percorsi di codice più frequentemente utilizzati. .NET 6 introduce PGO dinamico. PgO dinamico funziona in stretta collaborazione con la compilazione a livelli per ottimizzare ulteriormente il codice in base a ulteriore strumentazione che viene messa in atto durante il livello 0. Il PGO dinamico è disabilitato per impostazione predefinita, ma è possibile abilitarlo con la variabile di ambiente DOTNET_TieredPGO
. Per altre informazioni, vedere miglioramenti delle prestazioni JIT.
.NET 6 introduce Crossgen2, il successore di Crossgen, che è stato rimosso. Crossgen e Crossgen2 sono strumenti che forniscono la compilazione ahead-of-time (AOT) per migliorare il tempo di avvio di un'app. Crossgen2 viene scritto in C# invece di C++e può eseguire analisi e ottimizzazione che non erano possibili con la versione precedente. Per altre informazioni, vedere Conversazione su Crossgen2.
La versione .NET 6 include il supporto per macOS Arm64 (o "Apple Silicon") e i sistemi operativi Windows Arm64, sia per l'esecuzione nativa di Arm64 che per l'emulazione x64. Inoltre, i programmi di installazione x64 e Arm64 .NET ora vengono installati side-by-side. Per ulteriori informazioni, vedere Supporto .NET per macOS 11 e Windows 11 per Arm64 e x64.
Hot reload è una funzionalità che consente di modificare il codice sorgente della tua app e applicare immediatamente le modifiche all'app in esecuzione. Lo scopo della funzionalità è aumentare la produttività evitando i riavvii delle app tra le modifiche. Il ricaricamento rapido è disponibile in Visual Studio 2022 e nello strumento da riga di comando dotnet watch
. Il ricaricamento rapido funziona con la maggior parte dei tipi di app .NET e per il codice sorgente C#, Visual Basic e C++. Per ulteriori informazioni, consulta il post del blog sul ricaricamento a caldo.
.NET MAUI (l'interfaccia utente dell'app multipiattaforma) è ancora in anteprima, con il release candidate in arrivo nel primo trimestre del 2022 e la disponibilità generale (GA) prevista per il secondo trimestre del 2022. .NET MAUI consente di creare app client native per sistemi operativi desktop e mobili con una singola codebase. Per ulteriori informazioni, consulta il post sul blog
C# 10 include innovazioni quali direttive global using
, dichiarazioni di namespace con ambito file e struct record. Per altre informazioni, vedere cronologia delle versioni del linguaggio C#.
In combinazione con questo lavoro, i modelli di progetto .NET SDK per C# sono stati modernizzati per usare alcune delle nuove funzionalità del linguaggio:
async Main
global using
Aggiungendo queste nuove funzionalità del linguaggio ai modelli di progetto, il nuovo codice inizia con le funzionalità abilitate. Tuttavia, il codice esistente non è interessato quando si esegue l'aggiornamento a .NET 6. Per altre informazioni su queste modifiche al modello, vedere il post di blog .NET SDK: modelli di progetto C# modernizzati.
F# 6 aggiunge diversi miglioramenti al linguaggio F# e F# Interactive. Per altre informazioni, vedere Novità di F# 6.
Visual Basic offre miglioramenti all'esperienza di Visual Studio e all'avvio del progetto Windows Form.
Per mantenere le dimensioni di .NET SDK più piccole, alcuni componenti sono stati inseriti in nuovi carichi di lavoro facoltativi SDK. Questi componenti includono .NET MAUI e Blazor WebAssembly AOT. Se si usa Visual Studio, verrà eseguita l'installazione di tutti i carichi di lavoro SDK necessari. Se usi l'interfaccia della riga di comando di .NET , puoi gestire i carichi di lavoro usando i nuovi comandi dotnet workload
:
Comando | Descrizione |
---|---|
ricerca carico di lavoro dotnet | Cerca i carichi di lavoro disponibili. |
'installazione del carico di lavoro dotnet | Installa un carico di lavoro specificato. |
la disinstallazione del carico di lavoro dotnet | Rimuove un carico di lavoro specificato. |
aggiornamento del carico di lavoro dotnet | Aggiorna i carichi di lavoro installati. |
ripristino del carico di lavoro dotnet | Reinstalla tutti i carichi di lavoro installati per ripristinare un'installazione interrotta. |
elenco di carichi di lavoro dotnet | Elenca i carichi di lavoro installati. |
Per altre informazioni, vedere carichi di lavoro sdk facoltativi.
Molti miglioramenti sono stati apportati in System.Text.Json in .NET 6, in modo che sia ora una soluzione di serializzazione a livello industriale.
.NET 6 aggiunge un nuovo generatore di codice sorgente per System.Text.Json. La generazione della sorgente funziona con JsonSerializer e può essere configurata in diverse possibilità. Può migliorare le prestazioni, ridurre l'utilizzo della memoria e facilitare il taglio degli assembly. Per ulteriori informazioni, vedere Come scegliere la riflessione o la generazione di origine in System.Text.Json e Come utilizzare la generazione di origine in System.Text.Json.
È stato aggiunto un nuovo modello DOM (Document Object Model) scrivibile, che integra il DOM di sola lettura preesistente. La nuova API offre un'alternativa di serializzazione leggera per i casi in cui l'uso di tipi POCO (Plain Old CLR Object) non è possibile. Consente inoltre di passare in modo efficiente a una sottosezione di un albero JSON di grandi dimensioni e leggere un array o deserializzare un POCO da tale sottosezione. Sono stati aggiunti i nuovi tipi seguenti per supportare il DOM scrivibile:
Per altre informazioni, vedere opzioni DOM JSON.
System.Text.Json supporta ora la serializzazione e la deserializzazione con istanze di IAsyncEnumerable<T>. I metodi di serializzazione asincroni enumerano qualsiasi istanza IAsyncEnumerable<T> in un oggetto grafico e quindi li serializzano come matrici JSON. Per la deserializzazione, è stato aggiunto il nuovo metodo JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken). Per altre informazioni, vedere serializzazione IAsyncEnumerable.
Nuove interfacce di serializzazione per la convalida e i valori predefiniti:
Per ulteriori informazioni, vedere Callbacks.
Nuovo attributo di ordinamento delle proprietà:
Per ulteriori informazioni, consultare Configurare l'ordine delle proprietà serializzate.
Nuovo metodo per scrivere json "raw":
Per altre informazioni, vedere Scrivere json non elaborato.
Serializzazione e deserializzazione sincrona su un flusso:
Nuova opzione per ignorare un oggetto quando viene rilevato un ciclo di riferimento durante la serializzazione:
Per altre informazioni, vedere Ignorare i riferimenti circolari.
Per altre informazioni sulla serializzazione e la deserializzazione con System.Text.Json
, vedere serializzazione e deserializzazione JSON in .NET.
.NET 6 include il supporto in anteprima per HTTP/3, una nuova versione di HTTP. HTTP/3 risolve alcuni problemi di funzionalità e prestazioni esistenti usando un nuovo protocollo di connessione sottostante denominato QUIC. QUIC stabilisce le connessioni più rapidamente e le connessioni sono indipendenti dall'indirizzo IP, consentendo ai client mobili di spostarsi tra reti Wi-Fi e rete cellulare. Per altre informazioni, vedere Usare HTTP/3 con HttpClient.
ASP.NET Core include miglioramenti nelle API minime, compilazione AOT (Ahead-of-Time) per le applicazioni Blazor WebAssembly e le applicazioni a pagina singola. Inoltre, è ora possibile eseguire il rendering dei componenti Blazor da JavaScript e integrarsi con le app basate su JavaScript esistenti. Per ulteriori informazioni, consultare la sezione Novità in ASP.NET Core 6.
.NET 6 offre un supporto migliorato per OpenTelemetry, che è una raccolta di strumenti, API e SDK che consentono di analizzare le prestazioni e il comportamento del software. Le API nello spazio dei nomi System.Diagnostics.Metrics implementano la specifica dell'API di OpenTelemetry Metrics. Ad esempio, sono disponibili quattro classi di strumenti per supportare diversi scenari di metriche. Le classi di strumenti sono:
.NET 6 aggiunge il supporto dell'anteprima per due mitigazioni della sicurezza chiave: TECNOLOGIA di imposizione del flusso di controllo (CET) e "esecuzione esclusiva di scrittura" (W^X).
CET è una tecnologia Intel disponibile in alcuni processori Intel e AMD più recenti. Aggiunge funzionalità all'hardware che proteggono da alcuni attacchi di dirottamento del flusso di controllo. .NET 6 fornisce supporto per CET per le app windows x64 ed è necessario abilitarlo in modo esplicito. Per ulteriori informazioni, vedere la compatibilità di .NET 6 con gli shadow stacks di Intel CET.
W^X è disponibile per tutti i sistemi operativi con .NET 6, ma è abilitato solo per impostazione predefinita in Apple Silicon. W^X blocca il percorso di attacco più semplice non consentendo che le pagine di memoria siano scrivibili ed eseguibili allo stesso tempo.
L'ottimizzazione delle distribuzioni autonome è stata migliorata. In .NET 5 sono stati rimossi solo gli assembly inutilizzati. .NET 6 aggiunge anche la riduzione di tipi e membri inutilizzati. Inoltre, gli avvisi di taglio, che avvertono dei punti in cui il taglio potrebbe rimuovere codice utilizzato in fase di esecuzione, sono ora abilitati per impostazione predefinita. Per altre informazioni, vedere Esegui il trimming delle distribuzioni e degli eseguibili autonomi.
.NET 6 SDK include alcuni nuovi analizzatori di codice che riguardano la compatibilità delle API, la compatibilità della piattaforma, la sicurezza del trimming, l'uso di span nella concatenazione e suddivisione delle stringhe, API per stringhe più veloci e API per le raccolte più veloci. Per un elenco completo degli analizzatori nuovi e quelli rimossi, consultare le versioni di Analyzer - .NET 6.
L'analizzatore di compatibilità della piattaforma riconosce i metodi di Is<Platform>
nella classe OperatingSystem, ad esempio OperatingSystem.IsWindows(), quali guardie della piattaforma. Per consentire protezioni personalizzate per la piattaforma, .NET 6 introduce due nuovi attributi che possono essere utilizzati per annotare campi, proprietà o metodi con un nome di piattaforma supportato o non supportato.
Application.SetDefaultFont(Font) è un nuovo metodo in .NET 6 che imposta il tipo di carattere predefinito nell'applicazione.
I modelli per le app Windows Forms C# sono stati aggiornati per supportare le direttive global using
, gli spazi dei nomi con ambito file e i tipi di riferimento annullabili. Includono anche il codice bootstrap dell'applicazione, che riduce il codice boilerplate e consente alla finestra di progettazione di Windows Form di eseguire il rendering dell'area di progettazione nel tipo di carattere preferito. Il codice bootstrap è una chiamata a ApplicationConfiguration.Initialize()
, che è un metodo generato dal codice sorgente che emette chiamate ad altri metodi di configurazione, quali Application.EnableVisualStyles(). Inoltre, se si imposta un tipo di carattere non predefinito tramite la proprietà ApplicationDefaultFont MSBuild, ApplicationConfiguration.Initialize()
genera una chiamata a SetDefaultFont(Font).
Per ulteriori informazioni, vedere il post del blog Novità di Windows Forms.
Il tarball del codice sorgente , che contiene tutto il codice sorgente per il .NET SDK, è ora il risultato del processo di compilazione del .NET SDK. Altre organizzazioni, ad esempio Red Hat, possono creare la propria versione dell'SDK usando questo tarball di origine.
Sono stati aggiunti altri identificatori del framework di destinazione per sistema operativo per .NET 6, ad esempio net6.0-android
, net6.0-ios
e net6.0-macos
. Per altre informazioni, vedere TFM specifici del sistema operativo .NET 5+.
Nell'anteprima è possibile usare operatori su tipi generici in .NET 6. .NET 6 introduce numerose interfacce che utilizzano la nuova funzionalità di anteprima di C# 10, i membri dell'interfaccia static abstract
. Queste interfacce corrispondono a operatori diversi, ad esempio IAdditionOperators
rappresenta l'operatore +
. Le interfacce sono disponibili nel pacchetto NuGet System.Runtime.Experimental. Per ulteriori informazioni, vedere il post del blog matematica generica.
I nuovi strumenti di convalida dei pacchetti consentono agli sviluppatori di librerie NuGet di verificare che i loro pacchetti siano coerenti e ben formati. È possibile determinare se:
Per altre informazioni, vedere il post di blog convalida dei pacchetti
.NET 6 introduce le seguenti nuove API che esaminano il codice e forniscono informazioni su nullabilità.
Queste API sono utili per strumenti e serializzatori basati su riflessione.
Diversi namespace delle estensioni hanno miglioramenti in .NET 6, come illustrato nella tabella seguente.
Namespace | Miglioramenti |
---|---|
Microsoft.Extensions.DependencyInjection |
CreateAsyncScope consente di usare in modo sicuro un'istruzione using per un provider di servizi che registra un servizio IAsyncDisposable. |
Microsoft.Extensions.Hosting | I nuovi metodi di ConfigureHostOptions semplificano la configurazione dell'applicazione. |
Microsoft.Extensions.Logging |
Microsoft.Extensions.Logging ha un nuovo generatore di codice sorgente per le API di registrazione ad alte prestazioni. Il generatore di origine viene attivato se si aggiunge il nuovo LoggerMessageAttribute a un metodo di registrazione partial . In fase di compilazione, il generatore genera l'implementazione del metodo partial , in genere più veloce in fase di esecuzione rispetto alle soluzioni di registrazione esistenti. Per altre informazioni, vedere generazione dell'origine di registrazione in fase di compilazione. |
Sono stati aggiunti numerosi metodi LINQ in .NET 6. La maggior parte dei nuovi metodi elencati nella tabella seguente include metodi equivalenti nel tipo System.Linq.Queryable.
In .NET 6 sono stati aggiunti i due struct seguenti: System.DateOnly e System.TimeOnly. Rappresentano rispettivamente la parte della data e la parte dell'ora di un DateTime. DateOnly è utile per compleanni e anniversari e TimeOnly è utile per allarmi giornalieri e orari di ufficio settimanali.
È ora possibile usare gli ID del fuso orario di Windows o IANA (Internet Assigned Numbers Authority) in qualsiasi sistema operativo in cui sono installati i dati del fuso orario. Il metodo TimeZoneInfo.FindSystemTimeZoneById(String) è stato aggiornato per convertire automaticamente l'input da un fuso orario di Windows a un fuso orario IANA (o viceversa) se il fuso orario richiesto non viene trovato nel sistema. Inoltre, i nuovi metodi TryConvertIanaIdToWindowsId(String, String) e TryConvertWindowsIdToIanaId sono stati aggiunti per gli scenari in cui è comunque necessario eseguire manualmente la conversione da un formato di fuso orario a un altro.
Ci sono anche alcuni altri miglioramenti del fuso orario. Per altre informazioni, vedere Miglioramenti relativi a Data, Ora e Fuso Orario in .NET 6.
La nuova classe PriorityQueue<TElement,TPriority> rappresenta una raccolta di elementi con un valore e una priorità. Gli elementi vengono dequeuati in ordine di priorità crescente, ovvero l'elemento con il valore di priorità più basso viene dequeuato per primo. Questa classe implementa una struttura dei dati di min heap .
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback:
Formazione
Modulo
Sicurezza dei valori Null in C # - Training
Informazioni sulle procedure di codifica per impedire l'occorrenza di NullReferenceException.