Condividi tramite


Modalità di controllo delle versioni di .NET

.NET Runtime e .NET SDK aggiungono nuove funzionalità a frequenze diverse. In generale, l'SDK viene aggiornato più frequentemente del runtime. Questo articolo illustra il runtime e i numeri di versione dell'SDK.

.NET rilascia una nuova versione principale ogni novembre. Le release con numero pari, come .NET 6 o .NET 8, hanno supporto a lungo termine (LTS). Le versioni LTS ottengono il supporto gratuito e patch per tre anni. Le versioni con numeri dispari hanno un supporto a termine standard. Le versioni di supporto a termine standard ottengono supporto gratuito e patch per 18 mesi.

Dettagli delle versioni

Il runtime .NET ha un approccio major.minor.patch al controllo delle versioni che segue il controllo delle versioni semantiche.

.NET SDK, tuttavia, non segue il controllo delle versioni semantiche. Il .NET SDK viene rilasciato più rapidamente e i numeri di versione devono esprimere sia il runtime allineato che le proprie versioni secondarie e patch.

Le prime due posizioni del numero di versione di .NET SDK corrispondono alla versione di .NET Runtime rilasciata con . Ogni versione dell'SDK può creare applicazioni per questo runtime o qualsiasi versione precedente.

La terza posizione del numero di versione dell'SDK comunica sia il numero secondario che il numero di patch. La versione minore viene moltiplicata per 100. Le due cifre finali rappresentano il numero di patch. La versione minore 1 e la versione patch 2 verrebbero rappresentate come 102. Ecco ad esempio una possibile sequenza di numeri di versione di runtime e SDK:

Cambiamento Ambiente di Esecuzione .NET .NET SDK (*) Note
Versione iniziale 5.0.0 5.0.100 Versione iniziale.
Patch SDK 5.0.0 5.0.101 Il runtime non è stato modificato con questa patch SDK. La patch SDK incrementa l'ultima cifra nella patch SDK.
Patch Runtime e SDK 5.0.1 5.0.102 La patch di runtime aggiorna il numero di patch di runtime. La patch SDK incrementa l'ultima cifra nella patch SDK.
Modifica delle funzionalità dell'SDK 5.0.1 5.0.200 La patch di runtime non è stata modificata. La nuova funzionalità dell'SDK porta a un aggiornamento della prima cifra nella versione della patch dell'SDK.
Patch del runtime 5.0.2 5.0.200 La patch di runtime aggiorna il numero di patch di runtime. L' SDK non cambia.

Nella tabella precedente è possibile visualizzare diversi criteri:

  • Runtime e SDK condividono versioni principali e secondarie. I primi due numeri per un 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 si incrementa solo quando il runtime viene aggiornato. Il numero di patch dell'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 SDK.

NOTE:

  • Se l'SDK ha 10 aggiornamenti delle funzionalità prima di un aggiornamento delle funzionalità di runtime, i numeri di versione vengono caricati nella serie 1000. La versione 5.0.1000 seguirà la versione 5.0.900. Questa situazione non dovrebbe verificarsi.
  • Non ci saranno 99 rilasci di patch senza un rilascio di funzionalità. Se una versione si avvicina a questo numero, impone un rilascio funzionale.

È possibile visualizzare altri dettagli nella proposta iniziale nel repository dotnet/designs .

Versionamento Semantico

Il runtime .NET rispetta approssimativamente il controllo delle versioni semantiche (SemVer), adottando l'uso del MAJOR.MINOR.PATCH controllo delle versioni, 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 ed esistono solo nelle build notturne, nelle build locali dalle destinazioni di origine e nelle versioni di anteprima non supportate.

Modifiche al numero di versione di runtime

  • MAJOR viene incrementato una volta all'anno e può contenere:

    • Cambiamenti significativi nel prodotto o una nuova direzione del prodotto.
    • L'API ha introdotto modifiche di rilievo. C'è un livello elevato per accettare cambiamenti significativi.
    • Viene adottata una versione più recente MAJOR di una dipendenza esistente.

    Le versioni principali vengono rilasciate una volta all'anno, quelle con numerazione pari ricevono supporto a lungo termine (LTS). La prima versione LTS che usa questo schema di controllo delle versioni è .NET 6. La versione non LTS più recente è .NET 9.

  • MINOR viene incrementato quando:

    • Viene aggiunta la superficie dell'API pubblica.
    • Viene aggiunto un nuovo comportamento.
    • Viene adottata una versione più recente MINOR di una dipendenza esistente.
    • Viene introdotta una nuova dipendenza.
  • PATCH viene incrementato quando:

    • Vengono apportate correzioni di bug.
    • Viene aggiunto il supporto per una piattaforma più recente.
    • Viene adottata una versione più recente PATCH di una dipendenza esistente.
    • Qualsiasi altra modifica non rientra in uno dei casi precedenti.

Quando sono presenti più modifiche, l'elemento più alto interessato dalle singole modifiche viene incrementato e quelli seguenti vengono reimpostati su 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 di file

I file scaricati per .NET, ad esempio, contengono la versione dotnet-sdk-5.0.301-win-x64.exe.

Versioni di anteprima

Le versioni di anteprima hanno un valore -preview.[number].[build] aggiunto al numero di versione. Ad esempio: 6.0.0-preview.5.21302.13.

Versioni di servizio

Dopo l'uscita di una versione, i rami di rilascio in genere smetteno di produrre build giornaliere e iniziano a produrre build di manutenzione. Le versioni di manutenzione hanno un'aggiunta -servicing-[number] alla versione. Ad esempio: 5.0.1-servicing-006924.

Compatibilità del runtime .NET

.NET Runtime mantiene un elevato livello di compatibilità tra le versioni. Le app .NET dovrebbero, in generale, continuare a funzionare dopo l'aggiornamento a una nuova versione principale del runtime .NET.

Ogni versione principale del runtime .NET contiene modifiche critiche, intenzionali, controllate attentamente e documentate. Le modifiche significative documentate non sono l'unica causa di problemi che possono interessare un'applicazione dopo l'aggiornamento. Ad esempio, un miglioramento delle prestazioni nel runtime .NET (che non è considerato una modifica di rilievo) 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 di 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 l'esecuzione in una nuova versione principale di .NET Runtime. Ripetere quindi l'app dopo l'aggiornamento per identificare eventuali problemi.

Si supponga che l'aggiornamento tramite la ricompilazione dell'app non sia fattibile. In tal caso, .NET Runtime 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 associati all'aggiornamento dell'app a una versione di runtime .NET principale più recente ed è comunque necessario ripetere il nuovo aggiornamento dell'app.

.NET Runtime supporta il caricamento di librerie destinate alle versioni precedenti del runtime .NET. Un'app aggiornata a una versione più recente del runtime .NET 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.

Vedere anche