Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
- System.Runtime.Serialization.FormatterConverter
- System.Runtime.Serialization.FormatterServices
- System.Runtime.Serialization.IFormatterConverter
- System.Runtime.Serialization.IObjectReference
- System.Runtime.Serialization.ISafeSerializationData
- System.Runtime.Serialization.ISerializationSurrogate
- System.Runtime.Serialization.ISurrogateSelector
- System.Runtime.Serialization.ObjectIDGenerator
- System.Runtime.Serialization.ObjectManager
- System.Runtime.Serialization.SafeSerializationEventArgs
- System.Runtime.Serialization.SerializationObjectManager
- System.Runtime.Serialization.StreamingContextStates
- System.Runtime.Serialization.SurrogateSelector
- System.Runtime.Serialization.Formatters.FormatterAssemblyStyle
- System.Runtime.Serialization.Formatters.FormatterTypeStyle
- System.Runtime.Serialization.Formatters.IFieldInfo
- System.Runtime.Serialization.Formatters.TypeFilterLevel
- System.Type.IsSerializable
- System.Reflection.FieldAttributes.NotSerialized
- System.Reflection.FieldInfo.IsNotSerialized
- System.Reflection.TypeAttributes.Serializable
- System.Runtime.Serialization.ISerializable.GetObjectData(SerializationInfo, StreamingContext)
- SerializationInfo(Type, IFormatterConverter, Boolean)
- SerializationInfo(Type, IFormatterConverter)
- StreamingContext(StreamingContextStates, Object)
- StreamingContext(StreamingContextStates)
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]
ochISerializable
). 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 tillISerializable
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.