Share via


CA1413:避免在 COM 可见值类型中使用非公共字段

类型名

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

类别

Microsoft.Interoperability

是否重大更改

原因

明确标记为对组件对象模型 (COM) 可见的值类型声明非公共实例字段。

规则说明

对 COM 可见的值类型的非公共实例字段对 COM 客户端可见。 请检查各个字段的内容以查找不应当公开的信息或将对设计或安全性造成意外影响的信息。

默认情况下,所有的公共值类型都对 COM 可见。 但是,为减少误报,此规则要求显式指定类型的 COM 可见性。 包含程序集必须将 System.Runtime.InteropServices.ComVisibleAttribute 设置为 false 进行标记,并且类型必须将 ComVisibleAttribute 设置为 true 进行标记。

如何解决冲突

若要修复与该规则的冲突并使字段保持隐藏状态,请将值类型更改为引用类型,或者从类型中移除 ComVisibleAttribute 特性。

何时禁止显示警告

如果公开字段是可接受的,则可以安全地禁止显示此规则发出的警告。

示例

下面的示例演示一个与该规则冲突的类型。

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   <ComVisibleAttribute(True)> _ 
   Public Structure SomeStructure

      Friend SomeInteger As Integer

   End Structure

End Namespace
using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(true)]
   public struct SomeStruct
   {
      internal int SomeValue;
   }
}

相关规则

CA1407:避免在 COM 可见类型中使用静态成员

CA1017:用 ComVisibleAttribute 标记程序集

请参见

概念

为互操作限定 .NET 类型

其他资源

与非托管代码交互操作