CA1421: Metoda používá zařazování za běhu při použití DisableRuntimeMarshallingAttribute
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1421 |
Název | Metoda používá zařazování za běhu při použití DisableRuntimeMarshallingAttribute |
Kategorie | Vzájemná funkční spolupráce |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Metoda používá zařazování za běhu a zařazování za běhu je explicitně zakázáno.
Popis pravidla
Pokud metoda používá při zařazování za běhu zařazování za běhu, může způsobit neočekávané rozdíly v chování v době běhu kvůli různým očekáváním nativního rozložení typu.
Jak opravit porušení
Povolte zařazování za běhu nebo používejte funkce, jako sizeof
jsou a ukazatele, abyste zajistili přesné výsledky.
Kdy potlačit upozornění
Nepotlačujte upozornění z tohoto pravidla.
Příklad
Následující fragment kódu ukazuje porušení ca1421:
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: DisableRuntimeMarshalling]
class C
{
public void Test()
{
nint offset = Marshal.OffsetOf(typeof(ValueType), "field");
}
}
struct ValueType
{
int field;
}
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
<Assembly: DisableRuntimeMarshalling>
Class C
Shared Sub S1()
Dim offset As IntPtr = Marshal.OffsetOf(GetType(ValueType), "field")
End Sub
End Class
Structure ValueType
Dim field As Integer
End Structure
Chcete-li opravit porušení, odeberte DisableRuntimeMarshallingAttribute atribut sestavení.
Spolupracujte s námi na GitHubu
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.