Attributi OSPlatform rinominati o rimossi

Gli attributi seguenti introdotti in .NET 5 Preview 8 sono stati rimossi o rinominati: MinimumOSPlatformAttribute, RemovedInOSPlatformAttribute e ObsoletedInOSPlatformAttribute.

Descrizione delle modifiche

In .NET 5 Preview 8 sono stati introdotti gli attributi seguenti nello spazio dei nomi System.Runtime.Versioning:

  • MinimumOSPlatformAttribute
  • RemovedInOSPlatformAttribute
  • ObsoletedInOSPlatformAttribute

In .NET 5 Preview 8, quando un progetto è destinato a una versione di .NET 5 specifica del sistema operativo usando un moniker framework di destinazione, ad esempio net5.0-windows, la compilazione aggiunge un attributo System.Runtime.Versioning.MinimumOSPlatformAttribute a livello di assembly.

In .NET 5 RC1 l'attributo ObsoletedInOSPlatformAttribute è stato rimosso e MinimumOSPlatformAttribute e RemovedInOSPlatformAttribute sono stati rinominati come segue:

Nome in Preview 8 Nome in RC1 e successive
MinimumOSPlatformAttribute SupportedOSPlatformAttribute
RemovedInOSPlatformAttribute UnsupportedOSPlatformAttribute

In .NET 5 RC1 e versioni successive, quando un progetto viene destinato a una versione di .NET 5 specifica del sistema operativo mediante un moniker framework di destinazione, ad esempio net5.0-windows, la compilazione aggiunge un attributo SupportedOSPlatformAttribute a livello di assembly.

Motivo della modifica

In .NET 5 Preview 8 sono stati introdotti attributi in System.Runtime.Versioning per specificare le piattaforme supportate per le API. Gli attributi vengono utilizzati dall'analizzatore di compatibilità della piattaforma per generare avvisi di compilazione quando le API specifiche della piattaforma vengono utilizzate su piattaforme che non le supportano.

In .NET 5 RC1, all'analizzatore di compatibilità della piattaforma è stata aggiunta un'ulteriore funzionalità per l'esclusione di piattaforme. La funzionalità consente di contrassegnare le API come completamente non supportate in determinate piattaforme del sistema operativo. Tale funzionalità ha sollecitato l'introduzione di modifiche agli attributi, incluso l'uso di nomi più idonei. L'attributo ObsoletedInOSPlatformAttribute è stato rimosso perché non era più necessario.

Versione introdotta

5.0 RC1

Quando si ridestina un progetto da .NET 5 Preview 8 a .NET 5 RC1, possono verificarsi errori di compilazione o di runtime causati da queste modifiche. Ad esempio, è probabile che la ridenominazione di MinimumOSPlatformAttribute generi errori, perché l'attributo viene applicato agli assembly specifici della piattaforma in fase di compilazione e i vecchi artefatti di compilazione faranno comunque riferimento al nome dell'API precedente.

Esempi di errori in fase di compilazione:

  • errore CS0246: Il nome di tipo o di spazio dei nomi 'MinimumOSPlatformAttribute' non è stato trovato. Probabilmente manca una direttiva using o un riferimento all'assembly.
  • errore CS0246: Il nome di tipo o di spazio dei nomi 'RemovedInOSPlatformAttribute' non è stato trovato. Probabilmente manca una direttiva using o un riferimento all'assembly.
  • errore CS0246: Il nome di tipo o di spazio dei nomi 'ObsoletedInOSPlatformAttribute' non è stato trovato. Probabilmente manca una direttiva using o un riferimento all'assembly.

Esempio di errore di run-time:

Eccezione non gestita. System.TypeLoadException:Non è stato possibile caricare il tipo 'System.Runtime.Versioning.MinimumOSPlatformAttribute' dall'assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Per risolvere questi errori:

  • Aggiornare tutti i riferimenti di MinimumOSPlatformAttribute a SupportedOSPlatformAttribute.
  • Aggiornare tutti i riferimenti di RemovedInOSPlatformAttribute a UnsupportedOSPlatformAttribute.
  • Rimuovere tutti i riferimenti a ObsoletedInOSPlatformAttribute.
  • Ricompilare il progetto (o eseguire un'operazione di pulizia e compilazione) per eliminare i vecchi artefatti di compilazione.

API interessate

  • System.Runtime.Versioning.MinimumOSPlatformAttribute
  • System.Runtime.Versioning.ObsoletedInOSPlatformAttribute
  • System.Runtime.Versioning.RemovedInOSPlatformAttribute