CA1413: Evitar os tipos de valor visível COM campos não públicos

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

<strong>Categoria</strong>

Microsoft.Interoperability

Alteração significativa

Quebrando

Causa

Um tipo de valor que está marcado como visível para o modelo de objeto componente (COM) especificamente declara um campo de instância confidenciais.

Descrição da regra

Campos de instância confidenciais visível em COM tipos de valor são visíveis para os clientes COM. Analise o conteúdo do campo para informações que não deve ser exposta ou que terá um efeito não intencional de design ou de segurança.

Por padrão, todos os tipos de valor público são visíveis para com. No entanto, para reduzir os falsos positivos, esta regra exige a visibilidade de COM do tipo a ser declarado explicitamente. O assembly contendo deve ser marcado com o System.Runtime.InteropServices.ComVisibleAttribute definido como false e o tipo deve ser marcado com o ComVisibleAttribute definido como true.

Como corrigir violações

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

Quando suprimir avisos

É seguro eliminar um aviso esta regra se exposição pública do campo é 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: Evite membros estáticos em tipos de visíveis COM

CA1017: Assemblies de marca com ComVisibleAttribute

Consulte também

Conceitos

Qualificação.NET tipos de interoperação

Outros recursos

Interoperação com Código Não Gerenciado