CA1401 : Les P/Invoke ne doivent pas être visibles
TypeName |
PInvokesShouldNotBeVisible |
CheckId |
CA1401 |
Catégorie |
Microsoft.Interoperability |
Modification avec rupture |
Oui |
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 à un code non managé.De telles méthodes ne doivent pas être exposées.Préserver le caractère privé ou interne de ces méthodes garantit que votre bibliothèque ne peut pas être utilisée pour créer une faille dans la sécurité en donnant aux appelants accès à des API non managées auxquelles ils n'auraient pas eu accès 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 ne respecte pas cette règle.
Imports System
NameSpace MSInternalLibrary
' Violates rule: PInvokesShouldNotBeVisible.
Public Class NativeMethods
Public Declare Function RemoveDirectory Lib "kernel32"( _
ByVal Name As String) As Boolean
End Class
End NameSpace
using System;
using System.Runtime.InteropServices;
namespace InteroperabilityLibrary
{
// Violates rule: PInvokesShouldNotBeVisible.
public class NativeMethods
{
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern bool RemoveDirectory(string name);
}
}