CA1413 : Éviter les champs non publics dans les types valeur visibles par COM
TypeName |
AvoidNonpublicFieldsInComVisibleValueTypes |
CheckId |
CA1413 |
Catégorie |
Microsoft.Interoperability |
Modification avec rupture |
Oui |
Cause
Un type valeur qui est spécifiquement marqué comme visible par l'objet COM (Component Object Model) déclare un champ d'instance non public.
Description de la règle
Les champs d'instance non publics des types valeur visibles par COM sont visibles par les clients COM.Passez en revue le contenu du champ pour voir les informations qui ne doivent pas être exposées, sinon vous aurez une conception imprévue ou des conséquences sur la sécurité.
Par défaut, tous les types valeur publics sont visibles par COM.Cependant, pour réduire les faux positifs, cette règle nécessite de la visibilité COM du type à déclarer explicitement.L'assembly conteneur doit être identifié par ComVisibleAttribute ayant la valeur false et le type doit être identifié par ComVisibleAttribute ayant la valeur true.
Comment corriger les violations
Pour corriger une violation de cette règle et garder le champ masqué, remplacez le type valeur par un type référence ou supprimez l'attribut ComVisibleAttribute du type.
Quand supprimer les avertissements
Il est possible de supprimer sans risque un avertissement de cette règle si l'exposition publique du champ est acceptable.
Exemple
L'exemple suivant présente un type qui enfreint la règle.
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;
}
}
Règles connexes
CA1407 : Éviter les membres statiques dans les types visibles par COM
CA1017 : Marquer les assemblys avec ComVisibleAttribute
Voir aussi
Concepts
Qualification des types .NET en vue d'une interopérabilité