SYSLIB0050: A formázóalapú szerializálás elavult

A következő API-k elavultak, a .NET 8-tól kezdve. A kódban való meghívás figyelmeztetést SYSLIB0050 generál fordításkor.

Áthidaló megoldás

  • Ha használta FormatterServices.GetUninitializedObject(Type), használja RuntimeHelpers.GetUninitializedObject(Type) helyette.

    Ha .NET-keretrendszer és modern .NET-hez fordít keresztfordítást, egy #if utasítással szelektíven hívhatja meg a megfelelő API-t, ahogyan az alábbi kódrészletben látható.

    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
    
  • Szerializálási kódtár írása esetén erősen ajánlott az örökölt szerializálási infrastruktúrát ([Serializable] és ISerializable) támogató szerializálási kódtárak ellen. A modern szerializálási kódtáraknak a privát implementáció részletei helyett egy típus nyilvános API-ján alapuló szabályzattal kell rendelkezniük. Ha ezekre a megvalósítási részletekre alapoz egy szerializálót, és erősen összekapcsolja a ISerializable szerializált hasznos adatba ágyazott típusneveket ösztönző más mechanizmusokkal, az a BinaryFormatter és a kapcsolódó típusok deszerializálási kockázataival kapcsolatos problémákhoz vezethet.

    Ha a szerializálási kódtárnak kompatibilisnek kell maradnia az örökölt szerializálási infrastruktúrával, egyszerűen letilthatja az örökölt szerializálási API-elavulásokat.

Figyelmeztetés mellőzése

Ha az elavult API-kat kell használnia, letilthatja a figyelmeztetést a kódban vagy a projektfájlban.

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz, hogy letiltsa, majd engedélyezze újra a figyelmeztetést.

// Disable the warning.
#pragma warning disable SYSLIB0050

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

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

Ha el szeretné tiltani a SYSLIB0050 projekt összes figyelmeztetését, adjon hozzá egy tulajdonságot <NoWarn> a projektfájlhoz.

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

További információ: Figyelmeztetések mellőzése.

Lásd még