Compartir a través de


SYSLIB0050: La serialización basada en formateador está obsoleta

Las siguientes API están obsoletas a partir de .NET 8. Si se los llama en el código, se genera la advertencia SYSLIB0050 en tiempo de compilación.

Solución alternativa

  • Si va a usar FormatterServices.GetUninitializedObject(Type), use mejor RuntimeHelpers.GetUninitializedObject(Type).

    Si realiza compilaciones cruzadas para .NET Framework y .NET moderno, puede usar una instrucción #if para llamar selectivamente a la API adecuada, como se muestra en el siguiente fragmento de código.

    Type typeToInstantiate;
    #if NET5_0_OR_GREATER
    object obj = System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(typeToInstantiate);
    #else
    object obj = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeToInstantiate);
    #endif
    
  • Si está escribiendo una biblioteca de serialización, se recomienda encarecidamente usar bibliotecas de serialización que admitan la infraestructura de serialización heredada ([Serializable] y ISerializable). Las bibliotecas de serialización modernas deben tener directivas basadas en las API públicas de un tipo en lugar de sus detalles de implementación privada. Si basa un serializador en estos detalles de implementación y lo vincula fuertemente a ISerializable y a otros mecanismos que fomentan la inserción de nombres de tipo dentro de la carga serializada, puede provocar los problemas descritos en Riesgos de deserialización durante el uso de BinaryFormatter y tipos relacionados.

    Si la biblioteca de serialización debe seguir siendo compatible con la infraestructura de serialización heredada, puede suprimir fácilmente las obsolescencias de la API de serialización heredada.

Supresión de una advertencia

Si tiene que seguir usando las API obsoletas, puede suprimir la advertencia en el código o en el archivo de proyecto.

Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y luego volver a habilitar la advertencia.

// Disable the warning.
#pragma warning disable SYSLIB0050

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0050

Para suprimir todas las advertencias SYSLIB0050 del proyecto, agregue una propiedad <NoWarn> al archivo del proyecto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
  </PropertyGroup>
</Project>

Para obtener más información, vea Suprimir advertencias.

Consulte también