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.