/CLRUNMANAGEDCODECHECK(移除 SuppressUnmanagedCodeSecurityAttribute)

/CLRUNMANAGEDCODECHECK 指定链接器不将 SuppressUnmanagedCodeSecurityAttribute 应用于从托管代码到本机 DLL 的链接器生成的 PInvoke 调用。

语法

/CLRUNMANAGEDCODECHECK
/CLRUNMANAGEDCODECHECK:NO

备注

默认情况下,链接器将 SuppressUnmanagedCodeSecurityAttribute 属性应用于链接器生成的 PInvoke 调用。 当 /CLRUNMANAGEDCODECHECK 生效时,SuppressUnmanagedCodeSecurityAttribute 将被移除。 要将 SuppressUnmanagedCodeSecurityAttribute 属性显式应用于链接器生成的 PInvoke 调用,可以使用 /CLRUNMANAGEDCODECHECK:NO

链接器仅将属性添加到使用 /clr/clr:pure 编译的对象。 但是,/clr:pure 编译器选项在 Visual Studio 2015 中已弃用,并且在 Visual Studio 2017 及更高版本中不受支持。

如果链接器找不到托管符号,无法满足来自托管调用方的引用,但可找到满足该引用的本机符号,则它将生成 PInvoke 调用。 有关 PInvoke 的更多信息,请参阅从托管代码调用本机函数

如果在代码中使用 AllowPartiallyTrustedCallersAttribute,则应显式设置 /CLRUNMANAGEDCODECHECK 以移除 SuppressUnmanagedCodeSecurity 属性。 如果一个映像同时包含 SuppressUnmanagedCodeSecurityAllowPartiallyTrustedCallers 属性,则这是潜在的安全漏洞。

有关使用 SuppressUnmanagedCodeSecurityAttribute 的影响的详细信息,请参阅非托管代码的安全编码准则

在 Visual Studio 开发环境中设置此链接器选项

  1. 打开项目的“属性页”对话框。 有关详细信息,请参阅设置编译器和生成属性

  2. 选择“配置属性”>“链接器”>“高级”属性页

  3. 修改“CLR 非托管代码检查”属性

以编程方式设置此链接器选项

  1. 请参阅 CLRUnmanagedCodeCheck

另请参阅

MSVC 链接器参考
MSVC 链接器选项