Compatibilità tra le versioni in .NET FrameworkVersion Compatibility in the .NET Framework

Per compatibilità con le versioni precedenti si intende che un'app sviluppata per una particolare versione di una piattaforma sarà eseguita su versioni successive di quella piattaforma.Backward compatibility means that an app that was developed for a particular version of a platform will run on later versions of that platform. .NET Framework tenta di ottimizzare la compatibilità con le versioni precedenti: il codice sorgente scritto per una versione di .NET Framework deve essere compilato su versioni successive di .NET Framework e i file binari in esecuzione su una versione di .NET Framework devono comportarsi in modo analogo nelle versioni successive di .NET Framework.The .NET Framework tries to maximize backward compatibility: Source code written for one version of the .NET Framework should compile on later versions of the .NET Framework, and binaries that run on one version of the .NET Framework should behave identically on later versions of the .NET Framework.

Compatibilità tra le versioni per appVersion compatibility for apps

Per impostazione predefinita, un'app viene eseguita sulla versione di .NET Framework per cui è stata creata.By default, an app runs on the version of the .NET Framework that it was built for. Se la versione specifica non è presente e il file di configurazione dell'app non definisce le versioni supportate, potrebbe verificarsi un errore di inizializzazione di .NET Framework.If that version is not present and the app configuration file does not define supported versions, a .NET Framework initialization error may occur. In questo caso, il tentativo di esecuzione dell'app avrà esito negativo.In this case, the attempt to run the app will fail.

Per definire le versioni specifiche in cui viene eseguita l'app, aggiungere uno o più elementi <supportedRuntime> al file di configurazione dell'app.To define the specific versions on which your app runs, add one or more <supportedRuntime> elements to your app's configuration file. Ogni elemento <supportedRuntime> elenca una versione supportata del runtime, con il primo che specifica la versione preferita e l'ultimo che specifica l'ultima versione nell'elenco delle preferenze.Each <supportedRuntime> element lists a supported version of the runtime, with the first specifying the most preferred version and the last specifying the least preferred version.

<configuration>  
   <startup>  
      <supportedRuntime version="v2.0.50727" />  
      <supportedRuntime version="v4.0" />  
   </startup>  
</configuration>  

Per altre informazioni, vedere Procedura: Configurare un'app per supportare .NET Framework 4 o 4.x.For more information, see How to: Configure an App to Support .NET Framework 4 or 4.x.

Compatibilità tra le versioni per componentiVersion compatibility for components

Un'app è in grado di controllare la versione di .NET Framework in cui viene eseguita, diversamente da un componente.An app can control the version of the .NET Framework on which it runs, but a component cannot. I componenti e le librerie di classi vengono caricati nel contesto di un'app specifica e pertanto vengono eseguiti automaticamente nella versione di .NET Framework in cui è in esecuzione l'app.Components and class libraries are loaded in the context of a particular app, and therefore automatically run on the version of the .NET Framework that the app runs on.

A causa di questa restrizione, le garanzie di compatibilità sono particolarmente importanti per i componenti.Because of this restriction, compatibility guarantees are especially important for components. A partire da .NET Framework 4, è possibile specificare il livello di compatibilità di un componente in più versioni applicando l'attributo System.Runtime.Versioning.ComponentGuaranteesAttribute a tale componente.Starting with the .NET Framework 4, you can specify the degree to which a component is expected to remain compatible across multiple versions by applying the System.Runtime.Versioning.ComponentGuaranteesAttribute attribute to that component. Gli strumenti possono usare questo attributo per rilevare le possibili violazioni della garanzia di compatibilità in versioni future di un componente.Tools can use this attribute to detect potential violations of the compatibility guarantee in future versions of a component.

Compatibilità con le versioni precedenti e .NET Framework 4.5Backward compatibility and the .NET Framework 4.5

.NET Framework 4.5 e versioni successive sono compatibili con le versioni precedenti delle app create con le versioni precedenti di .NET Framework.The .NET Framework 4.5 and later versions are backward-compatible with apps that were built with earlier versions of the .NET Framework. In altre parole, le app e i componenti creati con le versioni precedenti funzioneranno senza applicare alcuna modifica in .NET Framework 4.5 e versioni successive.In other words, apps and components built with previous versions will work without modification on the .NET Framework 4.5 and later versions. Tuttavia, per impostazione predefinita, le app vengono eseguite sulla versione di Common Language Runtime per la quale sono state sviluppate, pertanto potrebbe essere necessario fornire un file di configurazione per far sì che l'app venga eseguita in .NET Framework 4.5 o versioni successive.However, by default, apps run on the version of the common language runtime for which they were developed, so you may have to provide a configuration file to enable your app to run on the .NET Framework 4.5 or later versions. Per altre informazioni, vedere la sezione Compatibilità tra le versioni per app in questo articolo.For more information, see the Version compatibility for apps section earlier in this article.

In pratica, questa compatibilità può essere interrotta da modifiche apparentemente irrilevanti in .NET Framework e nelle tecniche di programmazione.In practice, this compatibility can be broken by seemingly inconsequential changes in the .NET Framework and changes in programming techniques. Ad esempio, i miglioramenti delle prestazioni in .NET Framework 4.5 possono esporre una race condition che non si era verificata nelle versioni precedenti.For example, performance improvements in the .NET Framework 4.5 can expose a race condition that did not occur on earlier versions. Allo stesso modo, l'uso di un percorso hardcoded per gli assembly .NET Framework, l'esecuzione di un confronto delle uguaglianze con una particolare versione di .NET Framework e l'acquisizione del valore di un campo privato tramite reflection non sono pratiche compatibili con le versioni precedenti.Similarly, using a hard-coded path to .NET Framework assemblies, performing an equality comparison with a particular version of the .NET Framework, and getting the value of a private field by using reflection are not backward-compatible practices. Inoltre, ogni versione di .NET Framework include correzioni di bug e modifiche correlate alla sicurezza che possono incidere sulla compatibilità di alcune app e componenti.In addition, each version of the .NET Framework includes bug fixes and security-related changes that can affect the compatibility of some apps and components.

Se l'app o il componente non funziona come previsto in .NET Framework 4.5 (e versioni intermedie: .NET Framework 4.5.1.NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 o 4.7.2), usare gli elenchi di controllo seguenti:If your app or component does not work as expected on the .NET Framework 4.5 (including its point releases, the .NET Framework 4.5.1.NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, or 4.7.2, use the following checklists:

  • Se l'app è stata sviluppata per l'esecuzione in qualsiasi versione di .NET Framework a partire da .NET Framework 4.0, vedere Compatibilità delle applicazioni in .NET Framework per creare un elenco di modifiche tra la versione di .NET Framework di destinazione e la versione in cui l'app è in esecuzione.If your app was developed to run on any version of the .NET Framework starting with the .NET Framework 4.0, see Application Compatibility in the .NET Framework to generate lists of changes between your targeted .NET Framework version and the version on which your app is running.

  • Se si dispone di un'app .NET Framework 3.5, vedere anche Problemi di migrazione di .NET Framework 4.If you have a .NET Framework 3.5 app, also see .NET Framework 4 Migration Issues.

  • Se si dispone di un'app .NET Framework 2.0, vedere anche Modifiche in .NET Framework 3.5 SP1.If you have a .NET Framework 2.0 app, also see Changes in .NET Framework 3.5 SP1.

  • Se si dispone di un'app .NET Framework 1.1, vedere anche Modifiche in .NET Framework 2.0.If you have a .NET Framework 1.1 app, also see Changes in .NET Framework 2.0.

  • Se si esegue la ricompilazione del codice sorgente esistente per l'esecuzione in .NET Framework 4.5 o nelle relative versioni intermedie oppure si sviluppa una nuova versione di un'app o di un componente destinato a .NET Framework 4.5.NET Framework 4.5 o alle relative versioni intermedie da una codebase sorgente esistente, vedere Elementi obsoleti in .NET Framework per i tipi e i membri obsoleti e applicare la soluzione alternativa descritta.If you are recompiling existing source code to run on the .NET Framework 4.5 or its point releases, or if you are developing a new version of an app or component that targets the .NET Framework 4.5.NET Framework 4.5 or its point releases from an existing source code base, check What's Obsolete in the Class Library for obsolete types and members, and apply the workaround described. (Il codice compilato precedentemente continuerà a essere in esecuzione sui tipi e i membri contrassegnati come obsoleti).(Previously compiled code will continue to run against types and members that have been marked as obsolete.)

  • Se si determina che una modifica in .NET Framework 4.5.NET Framework 4.5 ha interrotto l'app, vedere Schema delle impostazioni di runtime per stabilire se è possibile usare un'impostazione di runtime nel file di configurazione dell'app per ripristinare il comportamento precedente.If you determine that a change in the .NET Framework 4.5.NET Framework 4.5 has broken your app, check the Runtime Settings Schema to determine whether you can use a runtime setting in your app's configuration file to restore the previous behavior.

  • Se si verifica un problema non documentato, segnalarlo nel sito della community degli sviluppatori .NET oppure nel repository GitHub Microsoft/dotnet.If you encounter an issue that is not documented, open a problem on the Developer Community site for .NET or open an issue in the Microsoft/dotnet GitHub repo.

Compatibilità ed esecuzione affiancataCompatibility and side-by-side execution

Se non si riesce a trovare una soluzione alternativa adatta al problema, ricordare che .NET Framework 4.5 (e versioni intermedie) viene eseguito side-by-side con le versioni 1.1, 2.0 e 3.5 ed è un aggiornamento sul posto che sostituisce la versione 4.If you cannot find a suitable workaround for your issue, remember that the .NET Framework 4.5 (or one of its point releases) runs side by side with versions 1.1, 2.0, and 3.5, and is an in-place update that replaces version 4. Per app destinate alle versioni 1.1, 2.0 e 3.5, è possibile installare la versione appropriata di .NET Framework nel computer di destinazione per eseguire l'app nell'ambiente migliore.For apps that target versions 1.1, 2.0, and 3.5, you can install the appropriate version of the .NET Framework on the target machine to run the app in its best environment. Per altre informazioni sull'esecuzione side-by-side, vedere Esecuzione side-by-side.For more information about side-by-side execution, see Side-by-Side Execution.

Vedere ancheSee Also

NovitàWhat's New
Elementi obsoleti nella libreria di classiWhat's Obsolete in the Class Library
Compatibilità delle applicazioniApplication Compatibility
Criteri relativi al ciclo di vita del supporto di Microsoft .NET FrameworkMicrosoft .NET Framework Support Lifecycle Policy
Problemi di migrazione di .NET Framework 4.NET Framework 4 Migration Issues