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.

Vedi anche