Les attributs OSPlatform ont été renommés ou supprimés

Les attributs suivants introduits dans .NET 5 Preview 8 ont été supprimés ou renommés : MinimumOSPlatformAttribute, RemovedInOSPlatformAttribute et ObsoletedInOSPlatformAttribute.

Description de la modification

.NET 5 Preview 8 a introduit les attributs suivants dans l’espace de noms System.Runtime.Versioning :

  • MinimumOSPlatformAttribute
  • RemovedInOSPlatformAttribute
  • ObsoletedInOSPlatformAttribute

Dans .NET 5 Preview 8, lorsqu’un projet cible une version spécifique au système d’exploitation de .NET 5 à l’aide d’un moniker d’infrastructure cible tel que net5.0-windows, la build ajoute un attribut System.Runtime.Versioning.MinimumOSPlatformAttribute de niveau assembly.

Dans .NET 5 RC1, le ObsoletedInOSPlatformAttribute a été supprimé et MinimumOSPlatformAttribute et RemovedInOSPlatformAttribute ont été renommés comme suit :

Nom dans Preview 8 Nom dans RC1 et versions ultérieures
MinimumOSPlatformAttribute SupportedOSPlatformAttribute
RemovedInOSPlatformAttribute UnsupportedOSPlatformAttribute

Dans .NET 5 RC1 et versions ultérieures, lorsqu’un projet cible une version spécifique au système d’exploitation de .NET 5 à l’aide d’un moniker d’infrastructure cible tel que net5.0-windows, la build ajoute un attribut SupportedOSPlatformAttribute de niveau assembly.

Raison du changement

.NET 5 Preview 8 a introduit des attributs dans System.Runtime.Versioning pour spécifier les plateformes prises en charge pour les API. Les attributs sont consommés par l’Analyseur de compatibilité de plateforme pour générer des avertissements de génération lorsque des API spécifiques à la plateforme sont consommées sur des plateformes qui ne prennent pas en charge ces API.

Pour .NET 5 RC1, une fonctionnalité supplémentaire a été ajoutée à l’analyseur de compatibilité de plateforme pour l’exclusion de plateforme. La fonctionnalité permet aux API d’être marquées comme entièrement non prises en charge sur les plateformes de système d’exploitation. Cette fonctionnalité a nécessité des modifications aux attributs, y compris l’utilisation de noms plus appropriés. Le ObsoletedInOSPlatformAttribute a été supprimé, car il n’était plus nécessaire.

Version introduite

5.0 RC1

Lorsque vous reciblez votre projet de .NET 5 Preview 8 vers .NET 5 RC1, vous pouvez rencontrer des erreurs de build ou d’exécution en raison de ces modifications. Par exemple, le renommage de MinimumOSPlatformAttribute est susceptible de générer des erreurs, car l’attribut est appliqué aux assemblys spécifiques à la plateforme au moment de la génération, et les anciens artefacts de build font toujours référence à l’ancien nom de l’API.

Exemples d’erreurs au moment de la génération :

  • erreur CS0246 : le nom du type ou de l’espace de noms ’MinimumOSPlatformAttribute’ est introuvable (une directive using ou une référence d’assembly est-elle manquante ?)
  • erreur CS0246 : le nom du type ou de l’espace de noms ’RemovedInOSPlatformAttribute’ est introuvable (une directive using ou une référence d’assembly est-elle manquante ?)
  • erreur CS0246 : le nom du type ou de l’espace de noms ’ObsoletedInOSPlatformAttribute’ est introuvable (une directive using ou une référence d’assembly est-elle manquante ?)

Exemple d’erreur d’exécution :

Exception non gérée. System.TypeLoadException : Could not load type 'System.Runtime.Versioning.MinimumOSPlatformAttribute' from assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Pour résoudre ces erreurs :

  • Mettez à jour toutes les références de MinimumOSPlatformAttribute à SupportedOSPlatformAttribute.
  • Mettez à jour toutes les références de RemovedInOSPlatformAttribute à UnsupportedOSPlatformAttribute.
  • Supprimez toutes les références à ObsoletedInOSPlatformAttribute.
  • Régénérez votre projet (ou effectuez Nettoyer et générer) pour supprimer les anciens artefacts de build.

API affectées

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