BinaryFormatter-serialisatie-API's produceren compilerfouten
Als onderdeel van het plan voor de afschaffing op lange termijn van BinaryFormatter blijven BinaryFormatter
we functionaliteit uit onze bibliotheken en aan weanontwikkelaars van het type verwijderen. Vanaf .NET 7 worden aanroepen naar de volgende API's gecompileerd op alle C#- en Visual Basic-projecttypen:
- System.Exception.SerializeObjectState Gebeurtenis
- BinaryFormatter.Serialize Methode
- BinaryFormatter.Deserialize Methode
- Formatter.Serialize(Stream, Object) Methode
- Formatter.Deserialize(Stream) Methode
- IFormatter.Serialize(Stream, Object) Methode
- IFormatter.Deserialize(Stream) Methode
Vorig gedrag
Sinds .NET 5 heeft het gebruik van de betrokken Serialize
en Deserialize
methoden een compilerwaarschuwing met id SYSLIB0011
geproduceerd. Zie BinaryFormatter-serialisatiemethoden zijn verouderd en verboden in ASP.NET apps (.NET 5) voor meer informatie.
Er is geen fout opgetreden bij het gebruik van de Exception.SerializeObjectState gebeurtenis.
Nieuw gedrag
Vanaf .NET 7 produceert het gebruik van een van de betrokken API's in code een compilerfout met dezelfde id. SYSLIB0011
Uw project wordt beïnvloed als het voldoet aan alle volgende criteria:
- Het is een C# of Visual Basic-project.
- Het is gericht
net7.0
op of hoger. - Er wordt rechtstreeks een van de betrokken API's aangeroepen.
- De waarschuwingscode
SYSLIB0011
wordt nog niet onderdrukt.
Versie geïntroduceerd
.NET 7
Type wijziging die fouten veroorzaken
Deze wijziging kan van invloed zijn op de broncompatibiliteit.
Reden voor wijziging
Als onderdeel van het plan voor de afschaffing op lange termijn van BinaryFormatter blijven BinaryFormatter
we functionaliteit uit onze bibliotheken en aan weanontwikkelaars van het type verwijderen.
Aanbevolen actie
De beste procedure is om weg BinaryFormatter
te migreren vanwege de beveiligings- en betrouwbaarheidsfouten. BinaryFormatter
kan in een toekomstige release worden verwijderd uit .NET. Het team van .NET-bibliotheken heeft al een standpunt ingenomen dat recente typen zoals System.Half en System.DateOnly niet compatibel zijn met BinaryFormatter
.
Als u de fouten moet onderdrukken, kunt u dit doen door de richtlijnen in het oorspronkelijke artikel te volgen. U kunt de fout ook uitschakelen door een projecteigenschap in te stellen die de fout weer converteert naar een waarschuwing (zodat deze overeenkomt met het gedrag van .NET 5/6).
Waarschuwing
Het instellen van deze eigenschap kan het gedrag van de host wijzigen. Zie <de eigenschap EnableUnsafeBinaryFormatterSerialization>.
<PropertyGroup>
...
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
Notitie
Als uw project wordt gecompileerd met 'waarschuwingen als fouten' ingeschakeld, mislukt de compilatie nog steeds. (Dit komt overeen met het gedrag dat is verzonden in de .NET 5- en .NET 6 SDK's.) Als dat het geval is, moet u de waarschuwing in de bron of in het SYSLIB0011
element van <NoWarn>
het projectbestand onderdrukken.
<Eigenschap EnableUnsafeBinaryFormatterSerialization>
De <EnableUnsafeBinaryFormatterSerialization
eigenschap is geïntroduceerd in .NET 5. Met .NET 7 is het gedrag van deze switch gewijzigd om zowel het compilatie- als het runtimegedrag van de host te beheren. De betekenis van deze switch verschilt op basis van het projecttype, zoals beschreven in de volgende tabel.
Type project | Eigenschap ingesteld op true |
Eigenschap ingesteld op false |
Eigenschap weggelaten |
---|---|---|---|
Bibliotheek/gedeeld onderdeel1 | De betrokken API's zijn verouderd als waarschuwing. De compilatie slaagt tenzij u 'waarschuwingen als fouten' hebt ingeschakeld voor uw toepassing of als u de SYSLIB0011 waarschuwingscode hebt onderdrukt. |
De betrokken API's zijn verouderd als fout en aanroepen van uw code naar deze API's mislukken tijdens het compileren, tenzij de fout wordt onderdrukt. | (Hetzelfde als voor false .) |
Blazor- en MAUI-apps2 | Aanroepen om uit te BinaryFormatter voeren mislukken. |
Aanroepen om uit te BinaryFormatter voeren mislukken. |
Aanroepen om uit te BinaryFormatter voeren mislukken. |
ASP.NET-app | De betrokken API's zijn verouderd als waarschuwing. De compilatie slaagt tenzij u 'waarschuwingen als fouten' hebt ingeschakeld voor uw toepassing of als u de SYSLIB0011 waarschuwingscode hebt onderdrukt. De runtime staat aanroepen toeBinaryFormatter , ongeacht of de aanroep afkomstig is van uw code of van een afhankelijkheid die u gebruikt. |
De betrokken API's zijn verouderd als fout en aanroepen van uw code naar deze API's mislukken tijdens het compileren, tenzij de fout wordt onderdrukt. De runtime verbiedt aanroepen, BinaryFormatter ongeacht of de aanroep afkomstig is van uw code of van een afhankelijkheid die u gebruikt. |
(Hetzelfde als voor false .) |
Bureaublad-apps en alle andere app-typen | De betrokken API's zijn verouderd als waarschuwing. De compilatie slaagt tenzij u 'waarschuwingen als fouten' hebt ingeschakeld voor uw toepassing of als u de SYSLIB0011 waarschuwingscode hebt onderdrukt. De runtime staat aanroepen toeBinaryFormatter , ongeacht of de aanroep afkomstig is van uw code of van een afhankelijkheid die u gebruikt. |
De betrokken API's zijn verouderd als fout en aanroepen van uw code naar deze API's mislukken tijdens het compileren, tenzij de fout wordt onderdrukt. De runtime verbiedt aanroepen, BinaryFormatter ongeacht of de aanroep afkomstig is van uw code of van een afhankelijkheid die u gebruikt. |
De betrokken API's zijn verouderd als fout en aanroepen van uw code naar deze API's mislukken tijdens het compileren, tenzij de fout wordt onderdrukt. De runtime staat aanroepen toeBinaryFormatter , ongeacht of de aanroep afkomstig is van uw code of van een afhankelijkheid die u gebruikt. |
1Runtime-beleid wordt beheerd door de app-host. BinaryFormatter
Aanroepen kunnen nog steeds mislukken tijdens runtime, zelfs als <EnableUnsafeBinaryFormatterSerialization>
deze is ingesteld true
op binnen het projectbestand van uw bibliotheek. Bibliotheken kunnen het runtimebeleid van de app-host niet overschrijven.
2De Blazor- en MAUI-runtimes verbieden aanroepen naar BinaryFormatter
. Ongeacht de waarde die u hebt ingesteld <EnableUnsafeBinaryFormatterSerialization>
, mislukken de aanroepen tijdens de uitvoering. Roep deze API's niet aan vanuit Blazor- of MAUI-toepassingen of vanuit bibliotheken die zijn bedoeld om te worden gebruikt door Blazor- of MAUI-apps.
Betrokken API's
- System.Exception.SerializeObjectState
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
- System.Runtime.Serialization.Formatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatter.Deserialize(Stream)
- System.Runtime.Serialization.IFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.IFormatter.Deserialize(Stream)