Obsolescenze nella libreria di classi .NET Framework

.NET Framework è cambiato nel corso del tempo. In ogni nuova versione vengono aggiunti nuovi tipi e membri dei tipi che forniscono nuove funzionalità. Anche i tipi esistenti e i relativi membri cambiano nel tempo. Ad esempio, alcuni tipi sono diventati meno importanti perché la tecnologia che supportavano è stata sostituita da una nuova, mentre altri metodi sono stati sostituiti da alcuni più recenti che sono superiori a essi per vari fattori.

Sia in .NET Framework sia in Common Language Runtime si cerca di supportare la compatibilità con le versioni precedenti, grazie alla quale le applicazioni sviluppate con una versione di .NET Framework possono essere eseguite nella versione di .NET Framework successiva. Ciò rende difficile la semplice rimozione di un tipo o di un membro del tipo. Per ovviare a questa difficoltà, si indica invece che un tipo o un membro del tipo non deve più essere usato contrassegnandolo come obsoleto o deprecato. Con l'obsolescenza di un tipo o un membro, gli sviluppatori erano consapevoli che tale elemento sarebbe scomparso e hanno potuto così intervenire in seguito alla rimozione. Tuttavia, il codice esistente che usa il tipo o il membro continua a essere eseguito nella nuova versione di .NET.

Nota

In .NET (Core), l'obsolescenza di un'API non significa necessariamente che l'API verrà rimossa. Per altre informazioni, vedere Rimozione di API in .NET.

Attributo ObsoleteAttribute

.NET Framework indica che un tipo o un membro del tipo è obsoleto contrassegnandolo con l'attributo ObsoleteAttribute. L'applicazione dell'attributo a un tipo o un membro indica che quel tipo o membro verrà rimosso in una versione futura, senza causare interruzioni nel codice compilato che lo usa.

Oltre a indicare che un tipo o un membro del tipo è obsoleto, ObsoleteAttribute definisce il modo in cui il compilatore gestisce il codice sorgente che include quel tipo o membro. Il compilatore può compilare il codice generando però un messaggio di avviso oppure può considerare l'uso del tipo o membro come un errore. Nel primo caso, il codice può essere compilato correttamente, ma un messaggio di avviso indica che il tipo o membro è obsoleto. Nel secondo caso, la compilazione non riesce.

Anche se la compilazione produce un errore anziché un messaggio di avviso, ObsoleteAttribute non influisce sul comportamento in fase di esecuzione. In altre parole, le applicazioni che usano il tipo o membro e che sono state compilate correttamente verranno sempre eseguite correttamente. Soltanto il tentativo di ricompilare un'applicazione che usa il tipo o membro avrà esito negativo.

Come gestire tipi e membri obsoleti

Quando si aggiorna e si ricompila il codice esistente, l'uso di un tipo o membro obsoleto che genera un avviso del compilatore nell'applicazione è accettabile. Tuttavia, è consigliabile rivedere il messaggio di avviso del compilatore per stabilire se sia opportuno modificare il codice dell'applicazione. Se il messaggio non indica un'alternativa adatta, adottare una delle soluzioni seguenti:

  • Modificare il codice rimuovendo l'uso del tipo o membro, se possibile.

    oppure

  • Rivedere la documentazione di quest'area tecnologica per stabilire come rispondere a questa deprecazione.

Si può scegliere di non ricompilare il codice esistente con una versione successiva di .NET Framework. È possibile invece specificare la versione di .NET Framework con la quale eseguire il codice compilato esistente. Si supponga ad esempio di avere un'applicazione denominata app1.exe, compilata con .NET Framework 3.5 e di voler eseguire l'applicazione in .NET Framework 4.5. La procedura da adottare è la seguente:

  1. Creare un file di configurazione per l'eseguibile principale e denominarlo NomeApp.exe.config, dove NomeApp è il nome dell'eseguibile dell'applicazione. Nel caso dell'applicazione denominata app1.exe dell'esempio, il nome del file di configurazione da creare sarebbe app1.exe.config.

  2. Aggiungere il codice seguente al file di configurazione.

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

Per specificare come destinazione una versione specifica di .NET Framework, assegnare uno dei valori stringa seguenti all'attributo version:

Versione di .NET Framework version string
4.8 (inclusa la 4.8.1) v4.0
4.7 (incluse 4.7.1 e 4.7.2) v4.0
4.6 (incluse 4.6.1 e 4.6.2) v4.0
4.5 (incluse 4.5.1 e 4.5.2) v4.0
4 v4.0
3.5 v2.0.50727
2.0 v2.0.50727
1.1 v1.1.4322
1.0 v1.0.3705

API obsolete per .NET Framework 4.5 e versioni successive

API obsolete per le versioni precedenti

Vedi anche