CA1418 : Valider la compatibilité des plateformes
Propriété | Value |
---|---|
Identificateur de la règle | CA1418 |
Titre | Valider la compatibilité de la plateforme |
Catégorie | Interopérabilité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Comme avertissement |
Cause
Un nom et une version de plateforme valides sont nécessaires pour l’analyseur de compatibilité des plateformes. Des violations sont signalées si la chaîne de plateforme fournie au constructeur OSPlatformAttribute se compose d’un nom de plateforme inconnu ou si la partie de version facultative n’est pas valide.
Description de la règle
Les attributs de compatibilité des plateformes dérivés de OSPlatformAttribute utilisent comme noms de plateforme de système d’exploitation des littéraux de chaîne comportant une partie version facultative. La chaîne doit se composer d’un nom de plateforme connu et d’une partie version valide (ou d’aucune partie version).
La liste des noms de plateforme connus est remplie à partir de deux emplacements :
Partie
PlatformName
des méthodes de protection OperatingSystem nomméeOperatingSystem.Is<PlatformName>[VersionAtLeast]()
. Par exemple, la méthode de protection OperatingSystem.IsWindows() ajouteWindows
à la liste des noms de plateforme connus.Le groupe d’éléments MSBuild
SupportedPlatform
du projet, y compris la liste MSBuild SupportedPlatforms par défaut. Il s’agit des plateformes connues dans le cadre du projet. Les auteurs de bibliothèques de classes peuvent ainsi ajouter d’autres plateformes à cette liste. Par exemple :<ItemGroup> <SupportedPlatform Include="PlatformName" /> </ItemGroup>
Si la chaîne de plateforme contient une partie version, celle-ci doit constituer une Version valide au format major.minor[.build[.revision]]
.
Violations
Solaris
est un nom de plateforme inconnu, car il n’est pas inclus dans la liste MSBuild SupportedPlatforms par défaut, et il n’existe aucune méthode de protection nomméeOperatingSystem.IsSolaris()
dans la classe OperatingSystem.[SupportedOSPlatform("Solaris")] // Warns: The platform 'Solaris' is not a known platform name. public void SolarisApi() { }
Android
est une plateforme connue, car il existe une méthode de protection OperatingSystem.IsAndroid() dans le type OperatingSystem. Toutefois, la partie version ne constitue pas une version valide. Elle doit comporter au moins deux entiers séparés par un point.[UnsupportedOSPlatform("Android10")] // Warns: Version '10' is not valid for platform 'Android'. Use a version with 2-4 parts for this platform. public void DoesNotWorkOnAndroid() { }
Linux
est une plateforme connue, car elle est incluse dans la liste MSBuild SupportedPlatforms par défaut, et il existe également une méthode de protection nommée OperatingSystem.IsLinux(). Toutefois, il n’existe aucune méthode de protection avec version telle queSystem.OperatingSystem.IsLinuxVersionAtLeast(int,int)
pour la plateformeLinux
. Par conséquent, aucune partie version n’est prise en charge sur Linux.[SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { }
Comment corriger les violations
Choisissez un nom de plateforme connu.
Si le nom de la plateforme est correct et que vous souhaitez en faire une plateforme connue, ajoutez-le à la liste MSBuild SupportedPlatforms dans votre fichier projet :
<ItemGroup> <SupportedPlatform Include="Solaris" /> </ItemGroup>
[SupportedOSPlatform("Solaris")] // No warning public void SolarisApi() { }
Corrigez la version non valide. Par exemple,
10
ne constitue pas une version valide pourAndroid
, tandis que10.0
est valide.// Before [UnsupportedOSPlatform("Android10")] // Warns: Version '10' is not valid for platform 'Android'. Use a version with 2-4 parts for this platform. public void DoesNotWorkOnAndroid() { } // After [UnsupportedOSPlatform("Android10.0")] // No warning. public void DoesNotWorkOnAndroid() { }
Si la plateforme ne prend pas en charge la version, supprimez la partie version.
// Before [SupportedOSPlatform("Linux4.8")] // Warns: Version '4.8' is not valid for platform 'Linux'. Do not use versions for this platform. public void LinuxApi() { } // After [SupportedOSPlatform("Linux")] // No warning. public void LinuxApi() { }
Quand supprimer les avertissements
Dans la mesure où il n’est pas recommandé d’utiliser un nom de plateforme inconnu ni une version non valide, ne supprimez pas cette règle.