Поделиться через


Атрибуты OSPlatform переименованы или удалены

Следующие атрибуты, появившиеся в предварительной версии 8 .NET 5, были удалены или переименованы: MinimumOSPlatformAttribute, RemovedInOSPlatformAttribute и ObsoletedInOSPlatformAttribute.

Описание изменения

В предварительной версии 8 .NET 5 в пространстве имен System.Runtime.Versioning появились следующие атрибуты:

  • MinimumOSPlatformAttribute
  • RemovedInOSPlatformAttribute
  • ObsoletedInOSPlatformAttribute

Если в предварительной версии 8 .NET 5 проект предназначен для использования в конкретной ОС .NET 5 с помощью моникера целевой платформы, например net5.0-windows, сборка добавляет атрибут System.Runtime.Versioning.MinimumOSPlatformAttribute уровня сборки.

В .NET 5 RC1 атрибут ObsoletedInOSPlatformAttribute был удален, а атрибуты MinimumOSPlatformAttribute и RemovedInOSPlatformAttribute переименованы следующим образом.

Имя предварительной версии 8 Имя RC1 и более поздних версий
MinimumOSPlatformAttribute SupportedOSPlatformAttribute
RemovedInOSPlatformAttribute UnsupportedOSPlatformAttribute

Если в .NET 5 RC1 и более поздних версиях проект предназначен для использования в конкретной ОС .NET 5 с помощью моникера целевой платформы, например net5.0-windows, сборка добавляет атрибут SupportedOSPlatformAttribute уровня сборки.

Причина изменения

В предварительной версии 8 .NET 5 в System.Runtime.Versioning появились атрибуты для указания поддерживаемых платформ для API-интерфейсов. Анализатор совместимости платформ использует эти атрибуты для создания предупреждений сборки, когда интерфейсы API, зависящие от платформы, работают на платформах, их не поддерживающих.

В .NET 5 RC1 в анализатор совместимости платформ была добавлена дополнительная возможность исключения платформы. Эта функция позволяет помечать API-интерфейсы как полностью не поддерживаемые на платформах ОС. Она предлагает изменить атрибуты или использовать более подходящие имена. ObsoletedInOSPlatformAttribute был удален, так как он больше не требуется.

Представленные версии

5.0 (RC1)

При изменении целевой платформы проекта с предварительной версии 8 .NET 5 на .NET 5 RC1 могут возникать ошибки сборки или времени выполнения. Например, переименование MinimumOSPlatformAttribute, скорее всего, приведет к появлению ошибок, поскольку атрибут применяется к сборкам для конкретных платформ во время сборки, а старые артефакты сборки по-прежнему ссылаются на старое имя API.

Примеры ошибок во время сборки:

  • ошибка CS0246: не удалось найти имя типа или пространства имен "MinimumOSPlatformAttribute" (отсутствует директива using или ссылка на сборку?)
  • ошибка CS0246: не удалось найти имя типа или пространства имен RemovedInOSPlatformAttribute (отсутствует директива using или ссылка на сборку?)
  • ошибка CS0246: не удалось найти имя типа или пространства имен "Устаревшее имяIndInOSPlatformAttribute" (отсутствует директива using или ссылка на сборку?)

Пример ошибки во время выполнения:

Необработанное исключение. System.TypeLoadException: не удалось загрузить тип System.Runtime.Versioning.MinimumOSPlatformAttribute из сборки System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f1d50a3a.

Чтобы устранить эти ошибки, выполните следующие действия.

  • Обновите все ссылки MinimumOSPlatformAttribute до SupportedOSPlatformAttribute.
  • Обновите все ссылки RemovedInOSPlatformAttribute до UnsupportedOSPlatformAttribute.
  • Удалите все ссылки на ObsoletedInOSPlatformAttribute.
  • Перестройте проект (или выполните очистку и сборку), чтобы удалить старые артефакты сборки.

Затронутые API

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