Compatibilità delle applicazioni in .NET Framework

La compatibilità è un obiettivo importante di ogni versione di .NET Framework. La compatibilità garantisce che ogni versione sia aggiuntiva, quindi le versioni precedenti continueranno a funzionare. D'altra parte, le modifiche apportate alle funzionalità precedenti (ad esempio, per migliorare le prestazioni, risolvere i problemi di sicurezza o correggere i bug) possono causare problemi di compatibilità nel codice esistente o nelle applicazioni esistenti eseguite in una versione successiva.

Ogni app è destinata a una versione specifica di .NET Framework tramite:

  • Definizione di un framework di destinazione in Visual Studio.
  • Indicazione del framework di destinazione in un file di progetto.
  • Applicazione di un TargetFrameworkAttribute al codice sorgente.

Quando si esegue la migrazione da una versione di .NET Framework a un'altra, esistono due tipi di modifiche da considerare:

Modifiche in fase di esecuzione

I problemi di runtime sono quelli che si verificano quando un nuovo runtime viene inserito in un computer e cambia il comportamento di un'app. Quando è in esecuzione in una versione più recente rispetto a quella di destinazione, .NET Framework usa un comportamento stravamato per simulare la versione di destinazione precedente. L'app viene eseguita nella versione più recente, ma funziona come se fosse in esecuzione nella versione precedente. Molti dei problemi di compatibilità tra le versioni di .NET Framework vengono mitigati tramite questo modello stranente. Ad esempio, se un file binario è stato compilato per .NET Framework 4.0 ma viene eseguito in un computer con .NET Framework 4.5 o versione successiva, viene eseguito in modalità compatibilità .NET Framework 4.0. Ciò significa che molte delle modifiche nella versione successiva non influiscono sul file binario.

La versione di .NET Framework destinata a un'applicazione è determinata dalla versione di destinazione dell'assembly di ingresso per il dominio applicazione in cui viene eseguito il codice. Tutti gli assembly aggiuntivi caricati in tale dominio applicazione sono destinati a tale versione. Ad esempio, nel caso di un eseguibile, la versione di destinazione dell'eseguibile è la modalità di compatibilità in cui vengono eseguiti tutti gli assembly del dominio applicazione.

Modifiche di reindirizzamento

Le modifiche di reindirizzamento sono quelle che si verificano quando un assembly viene ricompilato per impostare come destinazione una versione più recente. La destinazione di una versione più recente significa che l'assembly opta per le nuove funzionalità, nonché potenziali problemi di compatibilità per le funzionalità precedenti.

Classificazione dell'impatto

Negli articoli che descrivono le modifiche di runtime e reindirizzamento, ad esempio, le modifiche di reindirizzamento per la migrazione a .NET Framework 4.8.x, i singoli elementi vengono classificati in base all'impatto previsto come indicato di seguito:

Major
Una modifica significativa che influisce su un numero elevato di app o che richiede variazioni sostanziali del codice.

Minor
Una modifica che influisce su un numero ridotto di app o che richiede variazioni marginali del codice.

Maiuscole/minuscole perimetrali
Una modifica che influisce sulle app in scenari molto specifici e non comuni.

Trasparente
Una modifica che non ha effetti evidenti sullo sviluppatore o sull'utente dell'app. L'app non dovrebbe richiedere variazioni a causa di questa modifica.

Vedi anche