Partage via


CA1401 : Les P/Invoke ne doivent pas être visibles

Propriété Value
Identificateur de la règle CA1401
Titre Les P/Invoke ne doivent pas être visibles
Catégorie Interopérabilité
Le correctif est cassant ou non cassant Rupture
Activé par défaut dans .NET 8 À titre de suggestion

Cause

Une méthode publique ou protégée dans un type public a l’attribut System.Runtime.InteropServices.DllImportAttribute (également implémenté par le mot clé Declare en Visual Basic).

Description de la règle

Les méthodes marquées avec l’attribut DllImportAttribute (ou les méthodes définies à l’aide du mot clé Declare en Visual Basic) utilisent les services d’appel de code non managé pour accéder au code non managé. De telles méthodes ne doivent pas être exposées. En conservant ces méthodes privées ou internes, vous vous assurez que votre bibliothèque ne peut pas être utilisée pour violer la sécurité en autorisant les appelants à accéder aux API non managées qu’elles ne pouvaient pas appeler autrement.

Comment corriger les violations

Pour corriger une violation de cette règle, modifiez le niveau d’accès de la méthode.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L’exemple suivant déclare une méthode qui enfreint cette règle.

// Violates rule: PInvokesShouldNotBeVisible.
public class NativeMethods
{
    [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
    public static extern bool RemoveDirectory(string name);
}
Imports System

Namespace ca1401

    ' Violates rule: PInvokesShouldNotBeVisible.
    Public Class NativeMethods
        Public Declare Function RemoveDirectory Lib "kernel32" (
        ByVal Name As String) As Boolean
    End Class

End Namespace