CA1403: Typy automatického rozložení by neměly být viditelné modelu COM
Zboží | Hodnota |
---|---|
RuleId | CA1403 |
Kategorie | Microsoft.Interoperability |
Změna způsobující chybu | Narušující |
Příčina
Viditelný typ hodnoty modelu COM (Component Object Model) je označen atributem nastaveným System.Runtime.InteropServices.StructLayoutAttribute na System.Runtime.InteropServices.LayoutKind.Auto.
Popis pravidla
LayoutKind Typy rozložení se spravují modulem CLR (Common Language Runtime). Rozložení těchto typů se může změnit mezi verzemi rozhraní .NET, což přeruší klienty MODELU COM, kteří očekávají určité rozložení. StructLayoutAttribute Pokud atribut není zadaný, kompilátory jazyka C#, Visual Basic a C++ pro typy hodnot určují LayoutKind.Auto.
Pokud není označeno jinak, všechny veřejné, ne generické typy jsou viditelné pro objekt COM a všechny neveřejné a obecné typy jsou pro com neviditelné. Aby se však snížil počet falešně pozitivních výsledků, vyžaduje toto pravidlo, aby byla explicitně uvedena viditelnost modelu COM typu. Obsahující sestavení musí být označeno nastavenou System.Runtime.InteropServices.ComVisibleAttribute sadou false
a typ musí být označen nastaveným parametrem ComVisibleAttributetrue
.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, změňte hodnotu atributu StructLayoutAttribute na LayoutKind.Explicit nebo LayoutKind.Sekvenční, nebo typ neviditelný pro com.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.
Příklad
Následující příklad ukazuje typ, který porušuje pravidlo, a typ, který pravidlo splňuje.
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
// This violates the rule.
[StructLayout(LayoutKind.Auto)]
[ComVisible(true)]
public struct AutoLayout
{
public int ValueOne;
public int ValueTwo;
}
// This satisfies the rule.
[StructLayout(LayoutKind.Explicit)]
[ComVisible(true)]
public struct ExplicitLayout
{
[FieldOffset(0)]
public int ValueOne;
[FieldOffset(4)]
public int ValueTwo;
}
}
Související pravidla
CA1408: Nepoužívejte AutoDual ClassInterfaceType
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro