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