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


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

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

Категория

Microsoft.Interoperability

Критическое изменение

Критическое изменение

Причина

Тип значения, специально помеченный как отображаемый для COM, объявляет закрытое поле экземпляра.

Описание правила

Не являющиеся общедоступными поля экземпляров типов значений, отображаемых для модели COM, отображаются для COM-клиентов.Проверьте содержимое полей на наличие сведений, к которым не должен предоставляться доступ или которые могут оказать непреднамеренное воздействие на разработку или безопасность.

По умолчанию все открытые типы значений отображаются для COM.Тем не менее чтобы уменьшить число ложных положительных результатов, это правило требует видимость COM для типа, который будет явно указан.Содержащая сборка должна быть помечена атрибутом 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;
   }
}

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

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

CA1017: помечайте сборки атрибутом ComVisibleAttribute

См. также

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

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

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

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