Dela via


SYSLIB0050: Formateringsbaserad serialisering är föråldrad

Följande API:er är föråldrade, med början i .NET 8. Att anropa dem i kod genererar en varning SYSLIB0050 vid kompileringstillfället.

Lösning

  • Om du använder använder FormatterServices.GetUninitializedObject(Type)RuntimeHelpers.GetUninitializedObject(Type) du i stället.

    Om du korskompilerar för .NET Framework och modern .NET kan du använda en #if instruktion för att selektivt anropa lämpligt API, enligt följande kodfragment.

    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
    
  • Om du skriver ett serialiseringsbibliotek rekommenderar vi starkt mot serialiseringsbibliotek som stöder den äldre serialiseringsinfrastrukturen ([Serializable] och ISerializable). Moderna serialiseringsbibliotek bör ha en princip som baseras på en typs offentliga API:er i stället för dess privata implementeringsinformation. Om du baserar en serialiserare på den här implementeringsinformationen och starkt kopplar den till ISerializable och andra mekanismer som uppmuntrar till inbäddning av typnamn i den serialiserade nyttolasten kan det leda till de problem som beskrivs i Deserialiseringsrisker vid användning av BinaryFormatter och relaterade typer.

    Om serialiseringsbiblioteket måste vara kompatibelt med den äldre serialiseringsinfrastrukturen kan du enkelt utelämna äldre serialiserings-API-obsoletioner.

Ignorera en varning

Om du måste använda föråldrade API:er kan du ignorera varningen i koden eller i projektfilen.

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan varningen.

// Disable the warning.
#pragma warning disable SYSLIB0050

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

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

Om du vill ignorera alla SYSLIB0050 varningar i projektet lägger du till en <NoWarn> egenskap i projektfilen.

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

Mer information finns i Utelämna varningar.

Se även