Freigeben über


CA1413: Nicht öffentliche Felder in für COM sichtbaren Werttypen vermeiden

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

Kategorie

Microsoft.Interoperability

Unterbrechende Änderung

Breaking

Ursache

Ein Werttyp, der ausdrücklich als für Component Object Model (COM) sichtbar markiert ist, deklariert ein nicht öffentliches Instanzfeld.

Regelbeschreibung

Nicht öffentliche Instanzenfelder von COM-sichtbaren Werttypen sind für COM-Clients sichtbar. Überprüfen Sie den Inhalt des Felds auf Informationen, die nicht verfügbar gemacht werden sollen oder unbeabsichtigte Auswirkungen auf Design oder Sicherheit haben.

Standardmäßig sind alle öffentlichen Werttypen für COM sichtbar. Um falsche Positive zu reduzieren, erfordert diese Regel jedoch die COM-Sichtbarkeit des Typs, der explizit angegeben werden soll. Die enthaltende Assembly muss mit einem System.Runtime.InteropServices.ComVisibleAttribute markiert werden, das auf false festgelegt ist. Der Typ muss mit einem ComVisibleAttribute markiert werden, das auf true festgelegt ist.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben und dafür zu sorgen, dass das Feld ausgeblendet bleibt, ändern Sie den Werttyp für einen Verweistyp oder entfernen das ComVisibleAttribute-Attribut von dem Typ.

Wann sollten Warnungen unterdrückt werden?

Warnungen dieser Regel können gefahrlos unterdrückt werden, wenn das öffentliche Verfügbarmachen des Feldes zulässig ist.

Beispiel

Im folgenden Beispiel wird ein Typ veranschaulicht, der gegen die Regel verstößt.

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

Verwandte Regeln

CA1407: Statische Member in für COM sichtbaren Typen vermeiden

CA1017: Assemblys mit ComVisibleAttribute markieren

Siehe auch

Konzepte

Qualifizieren von .NET-Typen für die Interoperation

Weitere Ressourcen

Interoperation mit nicht verwaltetem Code