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 :

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.

Voir aussi