Skip to content

Gendarme.Rules.Interoperability.Com.AutoLayoutTypesShouldNotBeComVisibleRule(git)

Sebastien Pouliot edited this page Mar 2, 2011 · 1 revision

AutoLayoutTypesShouldNotBeComVisibleRule

Assembly: Gendarme.Rules.Interoperability.Com
Version: git

Description

This rule checks for [[System.Runtime.InteropServices.ComVisible|http://msdn.microsoft.com/library/System.Runtime.InteropServices.ComVisibleAttribute.aspx]] decorated value types which have [[System.Runtime.InteropServices.StructLayout|http://msdn.microsoft.com/library/System.Runtime.InteropServices.StructLayoutAttribute.aspx]] attribute set to System.Runtime.InteropServices.LayoutKind.Auto because auto layout can change between Mono and .NET or even between releases of the .NET/Mono frameworks. Note that this does not affect System.Enum -based types.

Examples

Bad example:

[assembly: ComVisible (false)]
namespace InteropLibrary {
    [ComVisible (true)]
    [StructLayout (LayoutKind.Auto)]
    public struct Good {
        ushort a;
        ushort b;
    }
}

Good example

[assembly: ComVisible (false)]
namespace InteropLibrary {
    [ComVisible (true)]
    [StructLayout (LayoutKind.Sequential)]
    public struct Good {
        ushort a;
        ushort b;
    }
}

Notes

  • Rule applies only when the containing assembly has ComVisible attribute explicitly set to false and the type has ComVisible attribute explicitly set to true.

Source code

You can browse the latest source code of this rule on github.com

Clone this wiki locally