Comparteix a través de


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

Propiedad Valor
Identificador de la regla CA1421
Título El método utiliza la serialización en tiempo de ejecución cuando se aplica el atributo DisableRuntimeMarshallingAttribute
Categoría Interoperabilidad
La corrección interrumpe o no interrumpe Sin interrupción
Habilitado de forma predeterminada en .NET 10 Como sugerencia
Idiomas aplicables C# y Visual Basic

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 en tiempo de ejecución debido a diferentes expectativas del diseño nativo de un tipo.

Cómo corregir infracciones

Habilite la intermediación en tiempo de ejecución o utilice características tales 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.