Compartir a través de


CA1413: Evite campos no públicos en tipos de valor visibles para COM

Nombre de tipo

AvoidNonpublicFieldsInComVisibleValueTypes

Identificador de comprobación

CA1413

Categoría

Microsoft.Interoperability

Cambio problemático

Motivo

Un tipo de valor marcado específicamente como visible para el Modelo de objetos componentes (COM) declara un campo de instancia no público.

Descripción de la regla

Los campos de instancia no públicos de tipos de valor visibles para COM están visibles para los clientes COM.Revise el contenido del campo para obtener información que no deba exponerse o que tendrá un impacto no deseado sobre la seguridad o el diseño.

De forma predeterminada, todos los tipos de valor públicos están visibles para COM.Sin embargo, esta regla exige que se indique la visibilidad COM del tipo explícitamente para reducir los falsos positivos.El ensamblado contenedor se debe marcar con el System.Runtime.InteropServices.ComVisibleAttribute establecido en false y el tipo se debe marcar con el ComVisibleAttribute establecido en true.

Cómo corregir infracciones

Para corregir una infracción de esta regla y mantener el campo oculto, cambie el tipo de valor a un tipo de referencia o quite el atributo ComVisibleAttribute del tipo.

Cuándo suprimir advertencias

Es seguro suprimir una advertencia de esta regla si es aceptable que este campo se exponga públicamente.

Ejemplo

El siguiente ejemplo muestra un tipo que infringe la regla.

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

Reglas relacionadas

CA1407: Evite miembros estáticos en tipos visibles para COM

CA1017: Marcar los ensamblados con ComVisibleAttribute

Vea también

Conceptos

Habilitar tipos de .NET para la interoperación

Otros recursos

Interoperar con código no administrado