CA1422 : Valider la compatibilité de la plateforme - API obsolètes
Propriété | Value |
---|---|
Identificateur de la règle | CA1422 |
Titre | Valider la compatibilité de la plateforme - API obsolètes |
Catégorie | Interopérabilité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre d’avertissement |
Cause
Une API marquée avec ObsoletedOSPlatformAttribute est appelée à partir d’un site d’appel marqué comme prenant en charge le système d’exploitation obsolète. Cette règle est similaire à CA1416 : Valider la compatibilité de la plateforme, sauf qu’elle avertit quand les API sont obsolètes sur une plateforme donnée ou qu’elles ne sont pas entièrement prises en charge.
Description de la règle
L’appel d’une API obsolète dans un système d’exploitation (version) donné à partir d’un site d’appel accessible sur ce système d’exploitation (version) n’est pas recommandé. Appelez plutôt une API non obsolète ou empêchez les appels de l’API obsolète sur les systèmes d’exploitation affectés.
Comment corriger les violations
Il existe plusieurs façons de corriger une violation de cette règle :
- Limitez le site d’appel aux systèmes d’exploitation qui n’ont pas la version obsolète en le marquant avec UnsupportedOSPlatformAttribute ou ObsoletedOSPlatformAttribute.
- Protégez l’appel en utilisant des API System.OperatingSystem, par exemple,
if (!OperatingSystem.IsLinux())
. - Protégez l’appel en utilisant une API annotée avec UnsupportedOSPlatformGuardAttribute ou annulée SupportedOSPlatformGuardAttribute.
Exemple
L’extrait de code suivant montre une violation de CA1422 :
[SupportedOSPlatform("Windows")]
public void M1()
{
// Violates rule CA1422.
// This call site is reachable on 'Windows',
// but 'ObsoletedOnWindows62()'
// is obsoleted on 'Windows 6.2' and later.
ObsoletedOnWindows62();
}
[ObsoletedOSPlatform("Windows6.2")]
public void ObsoletedOnWindows62()
{ }
<SupportedOSPlatform("Windows")>
Public Sub M1()
' Violates rules CA1422.
' This call site is reachable on 'Windows',
' but 'ObsoletedOnWindows62()'
' is obsoleted on 'Windows 6.2' and later.
ObsoletedOnWindows62()
End Sub
<ObsoletedOSPlatform("Windows6.2")>
Public Sub ObsoletedOnWindows62()
End Sub
L’extrait de code suivant corrige la violation en ajoutant au site d’appel un attribut UnsupportedOSPlatformAttribute qui spécifie la version dans laquelle la méthode appelée est obsolète.
[SupportedOSPlatform("Windows")]
[ObsoletedOSPlatform("Windows6.2")]
public void M1()
{
ObsoletedOnWindows62();
}
[ObsoletedOSPlatform("Windows6.2")]
public void ObsoletedOnWindows62()
{ }
<SupportedOSPlatform("Windows")>
<ObsoletedOSPlatform("Windows6.2")>
Public Sub M1()
ObsoletedOnWindows62()
End Sub
<ObsoletedOSPlatform("Windows6.2")>
Public Sub ObsoletedOnWindows62()
End Sub
Quand supprimer les avertissements
Vous pouvez supprimer un avertissement de cette règle si vous n’êtes pas préoccupé par l’appel d’une API obsolète, ou si vous savez que l’API obsolète ne sera jamais appelée sur la version de système d’exploitation affectée.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1422
// The code that's violating the rule is on this line.
#pragma warning restore CA1422
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1422.severity = none
Pour désactiver la catégorie entière des règles, définissez la gravité de la catégorie sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Interoperability.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.