Поделиться через


Избегать использования не открытых полей в типах значений, видимых в COM

Обновлен: Ноябрь 2007

TypeName

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

Связанные правила

Не используйте статические члены в видимых COM типах

Помечайте сборки атрибутом ComVisibleAttribute

См. также

Основные понятия

Уточнение типов .NET для взаимодействия

Другие ресурсы

Взаимодействие с неуправляемым кодом