CA1421: метод использует маршаллирование среды выполнения при применении DisableRuntimeMarshallingAttribute
Свойство | Значение |
---|---|
Идентификатор правила | CA1421 |
Заголовок | Метод использует маршаллирование среды выполнения при применении DisableRuntimeMarshallingAttribute |
Категория | Совместимость |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 8 | Как предложение |
Причина
Метод использует маршаллирование среды выполнения, а маршаллирование среды выполнения явно отключено.
Описание правила
Если метод использует маршаллирование среды выполнения при отключении маршалинг среды выполнения, он может вызвать непредвиденные различия в поведении во время выполнения из-за различных ожиданий собственного макета типа.
Устранение нарушений
Включите маршаллирование среды выполнения или используйте такие функции, как sizeof
и указатели, чтобы обеспечить точные результаты.
Когда лучше отключить предупреждения
Не подавляйте предупреждение из этого правила.
Пример
В следующем фрагменте кода показано нарушение 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
Чтобы устранить нарушение, удалите DisableRuntimeMarshallingAttribute атрибут в сборке.