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 |
Sí |
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