Share via


CA1421: El método usa la serialización en tiempo de ejecución cuando se aplica DisableRuntimeMarshallingAttribute

Propiedad Value
Identificador de la regla CA1421
Título El método usa la serialización en tiempo de ejecución cuando se aplica DisableRuntimeMarshallingAttribute
Categoría Interoperabilidad
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Un método usa la serialización en tiempo de ejecución, y la serialización en tiempo de ejecución está deshabilitada explícitamente.

Descripción de la regla

Si un método usa la serialización en tiempo de ejecución cuando la serialización en tiempo de ejecución está deshabilitada, puede provocar diferencias de comportamiento inesperadas durante el tiempo de ejecución debido a diferentes expectativas del diseño nativo de un tipo.

Cómo corregir infracciones

Habilite la serialización en tiempo de ejecución o use características como sizeof y punteros para garantizar resultados precisos.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

El siguiente fragmento de código muestra una infracción de la regla 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

Para corregir la infracción, quite el atributo DisableRuntimeMarshallingAttribute del ensamblado.