Modalità di versionamento di .NET
Runtime .NET e .NET SDK aggiungono nuove funzionalità con frequenze diverse. In generale, l'SDK viene aggiornato più frequentemente rispetto al runtime. Questo articolo illustra il runtime e i numeri di versione del SDK.
.NET rilascia una nuova versione principale ogni novembre. Le versioni con numero pari, ad esempio .NET 6 o .NET 8, sono supportate a lungo termine (LTS). Le versioni LTS ottengono il supporto gratuito e patch per tre anni. Le versioni con numeri dispari hanno supporto con durata standard. Le versioni con supporto con durata standard ottengono supporto gratuito e patch per 18 mesi.
Dettagli del controllo delle versioni
Il runtime .NET ha un approccio di tipo major.minor.patch al versionamento che segue il Versionamento Semantico.
.NET SDK, tuttavia, non segue il Versionamento Semantico. .NET SDK viene rilasciato più rapidamente e i relativi numeri di versione trasmettono sia il runtime allineato sia le versioni secondarie e le patch del SDK.
Le prime due posizioni del numero di versione di .NET SDK corrispondono alla versione del runtime .NET con cui è stato rilasciato. Ogni versione del SDK può creare applicazioni per questa versione del runtime o per qualsiasi versione precedente.
La terza posizione del numero di versione del SDK comunica la versione secondaria e il numero di patch. La versione secondaria viene moltiplicata per 100. Le due cifre finali rappresentano il numero della patch. Quindi la versione secondaria 1, versione patch 2 viene rappresentata come 102. Ecco ad esempio una possibile sequenza di numeri di versione di runtime e SDK:
Modifica | Runtime .NET | .NET SDK (*) | Note |
---|---|---|---|
Versione iniziale | 5.0.0 | 5.0.100 | Versione iniziale. |
Patch di SDK | 5.0.0 | 5.0.101 | Il runtime non è stato modificato con questa patch di SDK. La patch di SDK aumenta l'ultima cifra nella patch di SDK. |
Runtime e patch di SDK | 5.0.1 | 5.0.102 | La patch di runtime aumenta il numero di patch di runtime. La patch di SDK aumenta l'ultima cifra nella patch di SDK. |
Modifica di funzionalità nel SDK | 5.0.1 | 5.0.200 | La patch di runtime non è stata modificata. La nuova funzionalità dell'SDK aumenta la prima cifra nella patch dell'SDK. |
Patch di runtime | 5.0.2 | 5.0.102 | La patch di runtime aumenta il numero di patch di runtime. L'SDK non cambia. |
Nella tabella precedente è possibile individuare diversi criteri:
- Il runtime e SDK condividono versioni principali e secondarie. I primi due numeri per uno SDK e un runtime specificati devono corrispondere. Tutti gli esempi precedenti fanno parte del flusso di versione .NET 5.0.
- La versione patch del runtime aumenta solo quando il runtime viene aggiornato. Il numero di patch di SDK non viene aggiornato per una patch di runtime.
- La versione patch dell'SDK viene aggiornata solo quando l'SDK viene aggiornato. È possibile che una patch di runtime non richieda una patch di SDK.
NOTE:
- Se l'SDK ha 10 aggiornamenti delle funzionalità prima di un aggiornamento delle funzionalità di runtime, i numeri di versione passano alla serie 1000. La versione 5.0.1000 seguirà la versione 5.0.900. Non è previsto che si verifichi questa situazione.
- È molto improbabile che vengano rilasciate 99 patch senza il rilascio di una versione con funzionalità. Quando una versione si avvicina a questo numero, forza il rilascio di una versione con funzionalità.
Altri dettagli sono disponibili nella proposta iniziale, nel repository dotnet/designs.
Versionamento Semantico
Il runtime .NET aderisce a grandi linee allo standard Versionamento Semantico (SemVer) e adotta l'uso del versionamento MAJOR.MINOR.PATCH
, usando le varie parti del numero di versione per descrivere il grado e il tipo di modifica.
MAJOR.MINOR.PATCH[-PRERELEASE-BUILDNUMBER]
Le parti facoltative PRERELEASE
e BUILDNUMBER
non fanno mai parte delle versioni supportate e sono disponibili solo nelle compilazioni notturne, nelle build locali compilate da destinazioni di origine e nelle versioni in anteprima non supportate.
Informazioni sulle modifiche al numero di versione del runtime
MAJOR
viene incrementato una volta all'anno e può contenere:- Cambiamenti significativi nel prodotto o una nuova direzione del prodotto.
- Modifiche che causano un'interruzione introdotte dall'API. L'accettazione di modifiche importanti è soggetta a una valutazione approfondita.
- Viene adottata una versione
MAJOR
più recente di una dipendenza esistente.
Le versioni principali vengono rilasciate una volta all'anno, le versioni con numero pari sono versioni con supporto a lungo termine (LTS). La prima versione LTS che usa questo schema di versionamento è .NET 6. La versione non LTS più recente è .NET 5.
MINOR
viene incrementato quando:- Viene aggiunta la superficie di attacco dell'API pubblica.
- Viene aggiunto un nuovo comportamento.
- Viene adottata una versione
MINOR
più recente di una dipendenza esistente. - Viene introdotta una nuova dipendenza.
PATCH
viene incrementato quando:- Vengono eseguite correzioni di bug.
- Viene aggiunto il supporto per una piattaforma più recente.
- Viene adottata una versione
PATCH
più recente di una dipendenza esistente. - Qualsiasi altra modifica non corrisponde a uno dei casi precedenti.
Quando sono presenti più modifiche, viene incrementato l'elemento maggiore interessato da singole modifiche e quelli che seguono vengono reimpostati a zero. Ad esempio, quando MAJOR
viene incrementato, MINOR.PATCH
viene reimpostato su zero. Quando MINOR
viene incrementato, PATCH
viene reimpostato su zero mentre MAJOR
rimane invariato.
Numeri di versione nei nomi dei file
I file scaricati per .NET includono la versione, ad esempio dotnet-sdk-5.0.301-win10-x64.exe
.
Versioni di anteprima
Le versioni di anteprima hanno un -preview.[number].[build]
aggiunto al numero di versione. Ad esempio: 6.0.0-preview.5.21302.13
.
Versioni di manutenzione
Dopo l'uscita di una versione, i rami generalmente interrompono la produzione di build giornaliere e avviano la produzione di build di manutenzione. Nelle versioni di manutenzione c'è l'aggiunta di -servicing-[number]
. Ad esempio: 5.0.1-servicing-006924
.
Compatibilità del runtime .NET
Il runtime .NET mantiene un livello elevato di compatibilità tra le versioni. Le app .NET devono generalmente continuare a funzionare dopo l'aggiornamento a una nuova versione principale del runtime .NET.
Ogni versione principale del runtime .NET contiene modifiche che causano un'interruzione intenzionali, attentamente controllate e documentate. Le modifiche che causano un'interruzione documentate non sono l'unica origine di problemi che possono influire su un'app dopo l'aggiornamento. Ad esempio, un miglioramento delle prestazioni nel runtime .NET (che non è considerato una modifica che causa un'interruzione) può esporre bug di threading di app latenti che causano il mancato funzionamento dell'app in tale versione. È previsto che le app di grandi dimensioni richiedano alcune correzioni dopo l'aggiornamento a una nuova versione principale del runtime .NET.
Per impostazione predefinita, le app .NET sono configurate per l'esecuzione in una determinata versione principale del runtime .NET, pertanto è consigliabile ricompilare l'app per aggiornarla per l'esecuzione in una nuova versione principale del runtime .NET. Ripetere quindi i test dell'app dopo l'aggiornamento per identificare eventuali problemi.
Si supponga che l'aggiornamento tramite la ricompilazione dell'app non sia fattibile. In tal caso, il runtime .NET fornisce impostazioni aggiuntive per consentire l'esecuzione di un'app in una versione di runtime .NET principale superiore rispetto alla versione per cui è stata compilata. Queste impostazioni non modificano i rischi correlati all'aggiornamento dell'app a una versione di runtime .NET principale superiore ed è comunque necessario ripetere i test dell'app dopo l'aggiornamento.
Il runtime .NET supporta il caricamento di librerie destinate alle versioni precedenti del runtime .NET. Un'app aggiornata a una versione di runtime .NET principale più recente può fare riferimento a librerie e pacchetti NuGet destinati alle versioni precedenti del runtime .NET. Non è necessario aggiornare contemporaneamente la versione di runtime di destinazione di tutte le librerie e i pacchetti NuGet a cui fa riferimento l'app.