Che cos'è .NET? Introduzione e panoramica
.NET è una piattaforma gratuita multipiattaforma open source per la creazione di molti tipi di applicazioni. .NET è basato su un runtime ad alte prestazioni usato nell'ambiente di produzione da molte app su larga scala.
App cloud
App client multipiattaforma
App di Windows
Altri tipi di app
Funzionalità
Le funzionalità .NET consentono agli sviluppatori di scrivere codice affidabile ed efficiente in modo produttivo.
- Codice asincrono
- Attributes (Attributi)
- Reflection
- Analizzatori del codice
- Delegati e lambda
- Eventi
- Eccezioni
- Garbage Collection
- Tipi generici
- LINQ (Language Integrated Query).
- Programmazione parallela
- Inferenza dei tipi : C#, F#, Visual Basic.
- Sistema di tipi
- Codice di tipo unsafe
Uso di .NET
Le app e le librerie .NET vengono compilate dal codice sorgente e da un file di progetto, usando l'interfaccia della riga di comando di .NET o un ambiente di sviluppo integrato (IDE) come Visual Studio.
L'esempio seguente è un'app .NET minima:
File di progetto:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>
</Project>
Codice sorgente:
Console.WriteLine("Hello, World!");
L'app può essere compilata ed eseguita con l'interfaccia della riga di comando di .NET:
% dotnet run
Hello, World!
Può anche essere compilato ed eseguito come due passaggi distinti. L'esempio seguente è per un'app denominata app:
% dotnet build
% ./bin/Debug/net6.0/app
Hello, World!
Distribuzioni binarie
- .NET SDK : set di strumenti, librerie e runtime per lo sviluppo, la compilazione e il test di app.
- Runtime .NET : set di runtime e librerie per l'esecuzione di app.
È possibile scaricare .NET da:
Gratuito e open source
.NET è gratuito, open source ed è un progetto .NET Foundation. .NET viene gestito da Microsoft e dalla community in GitHub in diversi repository.
L'origine e i file binari .NET sono concessi in licenza con la licenza MIT. Le licenze aggiuntive si applicano a Windows per le distribuzioni binarie.
Supporto
Microsoft supporta .NET in sistemi operativi Android, Apple, Linux e Windows. Può essere usato nelle architetture Arm64, x64 e x86. È supportato anche in ambienti emulati, ad esempio macOS Rosetta 2.
Le nuove versioni di .NET vengono rilasciate annualmente a novembre. Le versioni di .NET negli anni con numero dispari sono Long-Term versioni del supporto (LTS) e sono supportate per tre anni. Le versioni in anni pari sono Standard-Term versioni del supporto (STS) e sono supportate per 18 mesi. Il livello di qualità, l'interruzione dei criteri di modifica e tutti gli altri aspetti delle versioni sono gli stessi. Per altre informazioni, vedere Versioni e supporto.
Il team .NET di Microsoft collabora con altre organizzazioni per distribuire e supportare .NET in vari modi.
Red Hat supporta .NET in Red Hat Enterprise Linux (RHEL).
Samsung supporta .NET nelle piattaforme Tizen.
Runtime
Common Language Runtime (CLR) è la base su cui si basano tutte le app .NET. Le funzionalità fondamentali del runtime sono:
- Garbage Collection.
- Sicurezza della memoria e sicurezza dei tipi.
- Supporto generale per i linguaggi di programmazione.
- Progettazione multipiattaforma.
.NET viene talvolta definito runtime di "codice gestito". Viene chiamato gestito principalmente perché usa un Garbage Collector per la gestione della memoria e perché applica la sicurezza dei tipi e della memoria. CLR virtualizza (o astrae) vari concetti relativi al sistema operativo e all'hardware, ad esempio memoria, thread ed eccezioni.
CLR è stato progettato per essere un runtime multipiattaforma fin dall'inizio. È stato convertito in più sistemi operativi e architetture. Il codice .NET multipiattaforma in genere non deve essere ricompilato per l'esecuzione in nuovi ambienti. È invece sufficiente installare un runtime diverso per eseguire l'app.
Il runtime espone vari servizi di diagnostica e API per debugger, dump e strumenti di traccia e osservabilità. L'implementazione dell'osservabilità è basata principalmente su OpenTelemetry, consentendo il monitoraggio flessibile delle applicazioni e la progettazione dell'affidabilità del sito (SRE).
Il runtime offre funzionalità di interoperabilità di basso livello in stile C, tramite una combinazione di P/Invoke, tipi valore e possibilità di eseguire il blit dei valori attraverso il limite nativo/gestito del codice.
Linguaggi
Il runtime è progettato per supportare più linguaggi di programmazione. I linguaggi C#, F# e Visual Basic sono supportati da Microsoft e sono progettati in collaborazione con la community.
C# è un linguaggio di programmazione moderno, orientato agli oggetti e indipendente dai tipi. Ha le sue radici nella famiglia di linguaggi C e sarà immediatamente familiare ai programmatori C, C++, Java e JavaScript.
F# è un linguaggio di programmazione interoperabile per la scrittura di codice conciso, affidabile ed efficiente. La programmazione F# è orientata ai dati, in cui il codice implica la trasformazione dei dati con funzioni.
Visual Basic usa una sintassi più dettagliata più vicina al linguaggio umano comune. Può essere un linguaggio più semplice da imparare per gli utenti nuovi alla programmazione.
Compilazione
Le app .NET (scritte in un linguaggio di alto livello come C#) vengono compilate in un linguaggio intermedio (IL). IL è un formato di codice compatto che può essere supportato in qualsiasi sistema operativo o architettura. La maggior parte delle app .NET usa API supportate in più ambienti, che richiedono l'esecuzione solo del runtime .NET.
IL deve essere compilato in codice nativo per l'esecuzione in una CPU, ad esempio Arm64 o x64. .NET supporta sia i modelli di compilazione Ahead-Of-Time (AOT) che JIT (Just-In-Time).
- In Android, macOS e Linux, la compilazione JIT è l'impostazione predefinita e AOT è facoltativo (ad esempio, con ReadyToRun).
- In iOS, AOT è obbligatorio (tranne quando è in esecuzione nel simulatore).
- Negli ambienti WebAssembly (Wasm), AOT è obbligatorio.
Il vantaggio di JIT è che può compilare un'app (non modificata) per le istruzioni della CPU e le convenzioni di chiamata in un determinato ambiente, in base al sistema operativo e all'hardware sottostanti. Può anche compilare il codice a livelli di qualità superiori o inferiori per migliorare le prestazioni di avvio e velocità effettiva a stato stabile.
Il vantaggio di AOT è che fornisce l'avvio ottimale dell'app e può (in alcuni casi) comportare distribuzioni più piccole. Lo svantaggio principale è che i file binari devono essere compilati per ogni destinazione di distribuzione separata (uguale a qualsiasi altro codice nativo). Il codice AOT non è compatibile con alcuni modelli di reflection.
Librerie di runtime
.NET include un set completo di librerie di classi. Queste librerie forniscono implementazioni per molti tipi e funzionalità di utilità specifici per utilizzo generico e carico di lavoro.
Ecco alcuni esempi di tipi definiti nelle librerie di runtime .NET:
- Ogni tipo .NET deriva dal System.Object tipo .
- Tipi di valore primitivo, ad esempio System.Boolean e System.Int32.
- Raccolte, ad esempio System.Collections.Generic.List<T> e System.Collections.Generic.Dictionary<TKey,TValue>.
- Tipi di dati, ad esempio System.Data.DataSet e System.Data.DataTable.
- Tipi di utilità di rete, ad esempio System.Net.Http.HttpClient.
- Tipi di utilità di I/O di file e di flusso, ad esempio System.IO.FileStream e System.IO.TextWriter.
- Tipi di utilità di serializzazione, ad esempio System.Text.Json.JsonSerializer e System.Xml.Serialization.XmlSerializer.
- Tipi a prestazioni elevate, ad esempio System.Span<T>, System.Numerics.Vectore Pipeline.
Per altre informazioni, vedere Panoramica delle librerie di runtime.
Gestione pacchetti NuGet
NuGet è lo strumento di gestione pacchetti per .NET. Consente agli sviluppatori di condividere file binari compilati tra loro. NuGet.org offre molti pacchetti popolari della community.
Strumenti
.NET SDK è un set di librerie e strumenti per lo sviluppo e l'esecuzione di applicazioni .NET. Include il motore di compilazione MSBuild , il compilatore Roslyn (C# e Visual Basic) e il compilatore F# . La maggior parte dei comandi viene eseguita usando il dotnet
comando . Gli strumenti dell'interfaccia della riga di comando possono essere usati per lo sviluppo locale e l'integrazione continua.
La famiglia di IDE di Visual Studio offre un supporto eccellente per .NET e i linguaggi C#, F# e Visual Basic.
GitHub Codespaces e le funzionalità di sicurezza di GitHub supportano .NET.
Notebook
.NET Interactive è un gruppo di strumenti e API dell'interfaccia della riga di comando che consentono agli utenti di creare esperienze interattive sul Web, markdown e notebook.
Per altre informazioni, vedere le risorse seguenti:
- Esercitazione su .NET In-Browser
- Uso di notebook .NET con Jupyter nel computer
- Documentazione di .NET Interactive
Integrazione continua/Distribuzione continua
MSBuild e l'interfaccia della riga di comando di .NET possono essere usati con vari strumenti e ambienti di integrazione continua, ad esempio:
Per altre informazioni, vedere Usare .NET SDK in ambienti di integrazione continua (CI).
Modelli di distribuzione
Le app .NET possono essere pubblicate in due modalità diverse:
- Le app autonome includono il runtime .NET e le librerie dipendenti. Possono essere a file singolo o a più file. Gli utenti dell'applicazione possono eseguirlo in un computer in cui non è installato il runtime .NET. Le app autonome hanno sempre come destinazione un singolo sistema operativo e una configurazione dell'architettura.
- Le app dipendenti dal framework richiedono una versione compatibile del runtime .NET, in genere installata a livello globale. Le app dipendenti dal framework possono essere pubblicate per un singolo sistema operativo e una configurazione dell'architettura o come "portabile", destinate a tutte le configurazioni supportate.
Le app .NET vengono avviate con un eseguibile nativo, per impostazione predefinita. L'eseguibile è sia nel sistema operativo che in base all'architettura. Le app possono anche essere avviate con il dotnet
comando .
Le app possono essere distribuite in contenitori. Microsoft fornisce immagini del contenitore per vari ambienti di destinazione.
Cronologia di .NET
Nel 2002 Microsoft ha rilasciato .NET Framework, una piattaforma di sviluppo per la creazione di app di Windows. Attualmente .NET Framework è alla versione 4.8 e rimane completamente supportato da Microsoft.
Nel 2014 Microsoft ha introdotto .NET Core come successore open source multipiattaforma a .NET Framework. Questa nuova implementazione di .NET ha mantenuto il nome .NET Core fino alla versione 3.1. La versione successiva dopo .NET Core 3.1 è stata denominata .NET 5.
Le nuove versioni di .NET continuano a essere rilasciate ogni anno, ognuna delle quali è maggiore. Includono nuove funzionalità significative e spesso abilitano nuovi scenari.
Ecosistema .NET
Sono disponibili più varianti di .NET, ognuna delle quali supporta un tipo diverso di app. La ragione di più varianti è parte storica, parte tecnica.
Implementazioni .NET (ordine cronologico):
- .NET Framework : consente l'accesso alle ampie funzionalità di Windows e Windows Server. Usato anche ampiamente per il cloud computing basato su Windows. .NET originale.
- Mono : implementazione multipiattaforma di .NET Framework. La community originale e open source .NET. Usato per le app Android, iOS e Wasm.
- .NET (Core): un'implementazione multipiattaforma e open source di .NET, rivalutata per l'età del cloud pur rimanendo significativamente compatibile con .NET Framework. Usato per le app Linux, macOS e Windows.