We recommend using Visual Studio 2017

CA1401: P/Invokes should not be visible


The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at CA1401: P-Invokes should not be visible.

|Breaking Change|Breaking|

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).

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.

To fix a violation of this rule, change the access level of the method.

Do not suppress a warning from this rule.

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);