Atributos OSPlatform renomeados ou removidos

Os seguintes atributos introduzidos no .NET 5 preview 8 foram removidos ou renomeados: MinimumOSPlatformAttribute, RemovedInOSPlatformAttributee ObsoletedInOSPlatformAttribute.

Descrição das alterações

O .NET 5 Preview 8 introduziu os seguintes atributos no namespace System.Runtime.Versioning:

  • MinimumOSPlatformAttribute
  • RemovedInOSPlatformAttribute
  • ObsoletedInOSPlatformAttribute

No .NET 5 Preview 8, quando um projeto tem como destino uma variante específica do sistema operacional do .NET 5 usando um moniker de estrutura de destino, como net5.0-windows, o build adiciona um atributo de nível de assembly System.Runtime.Versioning.MinimumOSPlatformAttribute.

No .NET 5 RC1, o ObsoletedInOSPlatformAttribute foi removido e MinimumOSPlatformAttribute e RemovedInOSPlatformAttribute foram renomeados da seguinte maneira:

Nome do Preview 8 RC1 e nome posterior
MinimumOSPlatformAttribute SupportedOSPlatformAttribute
RemovedInOSPlatformAttribute UnsupportedOSPlatformAttribute

No .NET 5 RC1 e posterior, quando um projeto tem como destino uma variante específica de sistema operacional do .NET 5 usando um moniker de estrutura de destino, como net5.0-windows, o build adiciona um atributo de nível de assembly SupportedOSPlatformAttribute.

Motivo da alteração

O .NET 5 Preview 8 introduziu atributos System.Runtime.Versioning para especificar plataformas com suporte para APIs. Os atributos são consumidos pelo Analisador de compatibilidade da plataforma para produzir avisos de build quando APIs específicas da plataforma são consumidas em plataformas que não dão suporte a essas APIs.

No caso do .NET 5 RC1, um recurso adicional foi acrescentado ao analisador de compatibilidade da plataforma para exclusão da plataforma. O recurso permite que as APIs sejam marcadas como totalmente sem suporte em plataformas do sistema operacional. Esse recurso provocou alterações nos atributos, incluindo o uso de nomes mais adequados. O ObsoletedInOSPlatformAttribute foi removido porque não era mais necessário.

Versão introduzida

5.0 RC1

Ao redirecionar seu projeto do .NET 5 Preview 8 para o .NET 5 RC1, você poderá encontrar erros de build ou de tempo de execução devido a essas alterações. Por exemplo, a renomeação de MinimumOSPlatformAttribute provavelmente produzirá erros, pois o atributo é aplicado a assemblies específicos de plataforma no tempo de compilação, e artefatos de build antigos ainda referenciam o nome da API antiga.

Exemplo de erros de tempo de build:

  • Erro CS0246: O tipo ou o nome do namespace 'MinimumOSPlatformAttribute' não foi encontrado (uma diretiva de uso ou uma referência de assembly está ausente?)
  • Erro CS0246: O tipo ou o nome do namespace 'RemovedInOSPlatformAttribute' não foi encontrado (uma diretiva de uso ou uma referência de assembly está ausente?)
  • Erro CS0246: O tipo ou o nome do namespace 'ObsoletedInOSPlatformAttribute' não foi encontrado (uma diretiva de uso ou uma referência de assembly está ausente?)

Exemplo de erro em tempo de execução:

Exceção sem tratamento. System.TypeLoadException: não foi possível carregar o tipo 'System.Runtime.Versioning.MinimumOSPlatformAttribute' do assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Para resolver esses erros:

  • Atualize todas as referências de MinimumOSPlatformAttribute para SupportedOSPlatformAttribute.
  • Atualize todas as referências de RemovedInOSPlatformAttribute para UnsupportedOSPlatformAttribute.
  • Remova todas as referências a ObsoletedInOSPlatformAttribute.
  • Recompile seu projeto (ou execute clean + build) para excluir artefatos de build antigos.

APIs afetadas

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