CA1421: Metoda używa marshalingu środowiska uruchomieniowego podczas stosowania elementu DisableRuntimeMarshallingAttribute
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1421 |
Tytuł | Metoda używa marshalingu środowiska uruchomieniowego, gdy zastosowano metodę DisableRuntimeMarshallingAttribute |
Kategoria | Współdziałanie |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Metoda używa marshalingu środowiska uruchomieniowego, a marshalling środowiska uruchomieniowego jest jawnie wyłączony.
Opis reguły
Jeśli metoda używa marshalingu środowiska uruchomieniowego, gdy marshalling środowiska uruchomieniowego jest wyłączony, może to spowodować nieoczekiwane różnice zachowania w czasie wykonywania z powodu różnych oczekiwań układu natywnego typu.
Jak naprawić naruszenia
Włącz marshaling środowiska uruchomieniowego lub używaj takich funkcji, jak sizeof
i wskaźników, aby zapewnić dokładne wyniki.
Kiedy pomijać ostrzeżenia
Nie pomijaj ostrzeżenia z tej reguły.
Przykład
Poniższy fragment kodu przedstawia naruszenie 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
Aby naprawić naruszenie, usuń DisableRuntimeMarshallingAttribute atrybut zestawu.