/CLRUNMANAGEDCODECHECK
(Remove SuppressUnmanagedCodeSecurityAttribute)
/CLRUNMANAGEDCODECHECK
specifies that the linker doesn't apply SuppressUnmanagedCodeSecurityAttribute to linker-generated PInvoke
calls from managed code into native DLLs.
/CLRUNMANAGEDCODECHECK
/CLRUNMANAGEDCODECHECK:NO
By default, the linker applies the SuppressUnmanagedCodeSecurityAttribute
attribute to linker-generated PInvoke
calls. When /CLRUNMANAGEDCODECHECK
is in effect, SuppressUnmanagedCodeSecurityAttribute
is removed. To explicitly apply the SuppressUnmanagedCodeSecurityAttribute
attribute to linker-generated PInvoke
calls, you can use /CLRUNMANAGEDCODECHECK:NO
.
The linker only adds the attribute to objects that are compiled using /clr
or /clr:pure
. However, the /clr:pure
compiler option is deprecated in Visual Studio 2015 and unsupported in Visual Studio 2017 and later.
A PInvoke
call is generated by the linker when the linker can't find a managed symbol to satisfy a reference from a managed caller but can find a native symbol to satisfy that reference. For more information about PInvoke
, see Calling Native Functions from Managed Code.
If you use AllowPartiallyTrustedCallersAttribute in your code, you should explicitly set /CLRUNMANAGEDCODECHECK
to remove the SuppressUnmanagedCodeSecurity
attribute. It's a potential security vulnerability if an image contains both the SuppressUnmanagedCodeSecurity
and AllowPartiallyTrustedCallers
attributes.
For more information about the implications of using SuppressUnmanagedCodeSecurityAttribute
, see Secure Coding Guidelines for Unmanaged Code.
Open the Property Pages dialog box for the project. For more information, see Set compiler and build properties.
Select the Configuration Properties > Linker > Advanced property page.
Modify the CLR Unmanaged Code Check property.