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 8 | 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í.
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