Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| 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 10 | 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 marshaling środowiska uruchomieniowego jest wyłączony, może to spowodować nieoczekiwane różnice w zachowaniu podczas działania z powodu odmiennych oczekiwań dotyczących 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.