CA1413: Evitare i campi non pubblici nei tipi valore visibili a COM
TypeName |
AvoidNonpublicFieldsInComVisibleValueTypes |
CheckId |
CA1413 |
Category |
Microsoft.Interoperability |
Breaking Change |
Breaking |
Causa
Un tipo di valore specificatamente contrassegnato come visibile a COM (Component Object Model) dichiara un campo di istanza non pubblico.
Descrizione della regola
I campi di istanza non pubblici di tipi di valori visibili a COM sono visibili ai client COM. Esaminare il contenuto del campo alla ricerca di informazioni che non devono essere esposte o che avranno un impatto non previsto sulla progettazione o la sicurezza.
Per impostazione predefinita, tutti i tipi di valori pubblici sono visibili a COM. Per ridurre i falsi positivi, tuttavia, la regola richiede che la visibilità COM del tipo sia dichiarata esplicitamente. È necessario che l'assembly contenitore sia contrassegnato con System.Runtime.InteropServices.ComVisibleAttribute impostato su false e che il tipo sia contrassegnato con ComVisibleAttribute impostato su true.
Come correggere le violazioni
Per correggere una violazione di questa regola e mantenere il campo nascosto, modificare il tipo di valore in un tipo di riferimento oppure rimuovere l'attributo ComVisibleAttribute dal tipo.
Esclusione di avvisi
L'esclusione di un avviso da questa regola è sicura se l'esposizione pubblica del campo è accettabile.
Esempio
Nell'esempio riportato di seguito viene illustrato un tipo che viola la regola.
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;
}
}
Regole correlate
CA1407: Evitare i membri statici nei tipi visibili a COM
CA1017: Contrassegnare gli assembly con ComVisibleAttribute
Vedere anche
Concetti
Qualificazione di tipi .NET per l'interoperabilità