Delen via


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:

Vorig gedrag

Sinds .NET 5 heeft het gebruik van de betrokken Serialize en Deserialize methoden een compilerwaarschuwing met id SYSLIB0011geproduceerd. 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.

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, BinaryFormatterongeacht 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, BinaryFormatterongeacht 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

Zie ook