CA1413: Avoid non-public fields in COM visible value types
Applies to: Visual Studio Visual Studio for Mac
Note
This article applies to Visual Studio 2017. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
Item | Value |
---|---|
RuleId | CA1413 |
Category | Microsoft.Interoperability |
Breaking change | Breaking |
Cause
A value type that is specifically marked as visible to Component Object Model (COM) declares a nonpublic instance field.
Rule description
Nonpublic instance fields of COM-visible value types are visible to COM clients. Review the content of the field for information that should not be exposed, or that will have an unintended design or security effect.
By default, all public value types are visible to COM. However, to reduce false positives, this rule requires the COM visibility of the type to be explicitly stated. The containing assembly must be marked with the System.Runtime.InteropServices.ComVisibleAttribute set to false
and the type must be marked with the ComVisibleAttribute set to true
.
How to fix violations
To fix a violation of this rule and keep the field hidden, change the value type to a reference type or remove the ComVisibleAttribute attribute from the type.
When to suppress warnings
It is safe to suppress a warning from this rule if public exposure of the field is acceptable.
Example
The following example shows a type that violates the rule.
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
[ComVisible(true)]
public struct SomeStruct
{
internal int SomeValue;
}
}
Imports System
Imports System.Runtime.InteropServices
<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary
<ComVisibleAttribute(True)> _
Public Structure SomeStructure
Friend SomeInteger As Integer
End Structure
End Namespace
Related rules
CA1407: Avoid static members in COM visible types
CA1017: Mark assemblies with ComVisibleAttribute