Compartilhar via


CA1413: evitar campos não públicos em tipos de valor visíveis COM

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

Categoria

Microsoft.Interoperability

Alteração Significativa

Quebra

Causa

Um tipo de valor marcado como especificamente visível ao Component Object Model (COM) declara um campo público da instância.

Descrição da Regra

Os campos público da instância de tipo de valor COM- visíveis são visíveis aos clientes COM.Revise o conteúdo do campo para informações que não são expostos, ou que terá um design ou um efeito não intencional de segurança.

Por padrão, todos os tipos de valores de chaves pública são visíveis na.No entanto, para reduzir falsos positivos, essa regra requer a visibilidade de COM o tipo ser declarado explicitamente.O assembly contentor deve ser marcado com ComVisibleAttribute definido como false e o tipo deve ser marcado com ComVisibleAttribute definido como true.

Como Corrigir Violações

Para corrigir uma violação desta regra e manter o campo oculto, altere o tipo de valor em um tipo de referência ou remover o atributo de ComVisibleAttribute do tipo.

Quando Suprimir Alertas

É seguro suprimir um aviso dessa regra se a exposição pública do campo for aceitável.

Exemplo

O exemplo a seguir mostra um tipo que viola a regra.

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

Regras Relacionadas

CA1407: evitar membros estáticos em tipos visíveis COM

CA1017: marcar assemblies com ComVisibleAttribute

Consulte também

Conceitos

Qualificando tipos do .NET para interoperação

Outros recursos

Interoperação com código não gerenciado