CA1401: P/Invokes should not be visible
Note
This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
Item | Value |
---|---|
TypeName | PInvokesShouldNotBeVisible |
CheckId | CA1401 |
Category | Microsoft.Interoperability |
Breaking Change | Breaking |
Cause
A public or protected method in a public type has the System.Runtime.InteropServices.DllImportAttribute attribute (also implemented by the Declare
keyword in Visual Basic).
Rule Description
Methods that are marked with the DllImportAttribute attribute (or methods that are defined by using the Declare
keyword in Visual Basic) use Platform Invocation Services to access unmanaged code. Such methods should not be exposed. By keeping these methods private or internal, you make sure that your library cannot be used to breach security by allowing callers access to unmanaged APIs that they could not call otherwise.
How to Fix Violations
To fix a violation of this rule, change the access level of the method.
When to Suppress Warnings
Do not suppress a warning from this rule.
Example
The following example declares a method that violates this rule.
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);
}
}
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