Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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 10 | 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á zařazování za běhu, když je zařazování za běhu zakázáno, může to způsobit neočekávané rozdíly v chování za běhu z důvodu rozdílných očekávání 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í.