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