Condividi tramite


Le API di serializzazione BinaryFormatter generano errori del compilatore

Nell'ambito del piano di deprecazione a lungo termine di BinaryFormatter, continuiamo a eliminare le funzionalità dalle librerie e a aiutare gli sviluppatori a distaccarsi dal tipo. A partire da .NET 7, le chiamate alle API seguenti generano errori in fase di compilazione in tutti i tipi di progetto C# e Visual Basic:

Comportamento precedente

A partire da .NET 5, l'uso dei metodi interessati Serialize e Deserialize genera un avviso del compilatore con ID SYSLIB0011. Per altre informazioni, vedere Metodi di serializzazione BinaryFormatter obsoleti e non consentiti nelle app di ASP.NET (.NET 5).

L'utilizzo dell'evento Exception.SerializeObjectState non ha generato un errore.

Nuovo comportamento

A partire da .NET 7, l'uso di una delle API interessate nel codice genera un errore del compilatore con lo stesso ID, SYSLIB0011. Il progetto verrà interessato se soddisfa tutti i criteri seguenti:

  • Si tratta di un progetto C# o Visual Basic.
  • È destinato net7.0 o superiore.
  • Chiama direttamente una delle API interessate.
  • Non sta ancora sopprimendo il codice di avvertimento SYSLIB0011.

Versione introdotta

.NET 7

Tipo di cambiamento che interrompe la compatibilità

Questa modifica può influire sulla compatibilità del codice sorgente .

Motivo della modifica

Nell'ambito del piano di deprecazione a lungo termine di BinaryFormatter, continuiamo a eliminare le funzionalità dalle librerie e a aiutare gli sviluppatori a distaccarsi dal tipo.

Il miglior corso d'azione consiste nel migrare da BinaryFormatter a causa dei suoi difetti di sicurezza e affidabilità. BinaryFormatter potrebbe essere rimosso da .NET in una versione futura. Il team delle librerie .NET ha già adottato una posizione che i tipi recenti come System.Half e System.DateOnly non saranno compatibili con BinaryFormatter.

Se è necessario eliminare gli errori, è possibile farlo seguendo le linee guida nell'articolo originale di obsoletion. È anche possibile disabilitare l'errore a livello di progetto impostando una proprietà del progetto che converte nuovamente l'errore in un avviso (in modo che corrisponda al comportamento di .NET 5/6).

Avvertimento

L'impostazione di questa proprietà potrebbe modificare il comportamento dell'host. Consultare <la proprietà EnableUnsafeBinaryFormatterSerialization>.

<PropertyGroup>
    ...
    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

Annotazioni

Se il progetto viene compilato con "avvisi come errori" abilitati, la compilazione avrà comunque esito negativo. Questo corrisponde al comportamento fornito negli SDK .NET 5 e .NET 6. In questo caso, sarà comunque necessario eliminare l'avviso SYSLIB0011 nell'origine o nell'elemento del file di <NoWarn> progetto.

<Proprietà EnableUnsafeBinaryFormatterSerialization>

La <EnableUnsafeBinaryFormatterSerialization proprietà è stata introdotta in .NET 5. Con .NET 7, il comportamento di questa opzione è stato modificato per controllare sia il comportamento di compilazione che di runtime dell'host . Il significato di questa opzione è diverso in base al tipo di progetto, come descritto nella tabella seguente.

Tipo di progetto Proprietà impostata su true Proprietà impostata su false Proprietà omessa
Libreria/componente condiviso1 Le API interessate sono obsolete come avviso. La compilazione avrà esito positivo a meno che gli "avvisi considerati come errori" siano abilitati per l'applicazione o che il codice di avviso SYSLIB0011 non sia stato nascosto. Le API interessate sono obsolete come errore e le chiamate dal codice a tali API avranno esito negativo in fase di compilazione, a meno che l'errore non venga eliminato. (Uguale a per false.)
Applicazioni Blazor e MAUI2 Le chiamate a BinaryFormatter avranno esito negativo in fase di esecuzione. Le chiamate a BinaryFormatter avranno esito negativo in fase di esecuzione. Le chiamate a BinaryFormatter avranno esito negativo in fase di esecuzione.
App ASP.NET Le API interessate sono obsolete come avviso. La compilazione avrà esito positivo a meno che gli "avvisi considerati come errori" siano abilitati per l'applicazione o che il codice di avviso SYSLIB0011 non sia stato nascosto. Il runtime consentirà le chiamate a BinaryFormatter, indipendentemente dal fatto che la chiamata abbia origine dal codice o da una dipendenza utilizzata. Le API interessate sono obsolete come errore e le chiamate dal codice a tali API avranno esito negativo in fase di compilazione, a meno che l'errore non venga eliminato. Il runtime proibirà le chiamate a BinaryFormatter, indipendentemente dal fatto che la chiamata abbia origine dal codice o da una dipendenza utilizzata. (Uguale a per false.)
App desktop e tutti gli altri tipi di app Le API interessate sono obsolete come avviso. La compilazione avrà esito positivo a meno che gli "avvisi considerati come errori" siano abilitati per l'applicazione o che il codice di avviso SYSLIB0011 non sia stato nascosto. Il runtime consentirà le chiamate a BinaryFormatter, indipendentemente dal fatto che la chiamata abbia origine dal codice o da una dipendenza utilizzata. Le API interessate sono obsolete come errore e le chiamate dal codice a tali API avranno esito negativo in fase di compilazione, a meno che l'errore non venga eliminato. Il runtime proibirà le chiamate a BinaryFormatter, indipendentemente dal fatto che la chiamata abbia origine dal codice o da una dipendenza utilizzata. Le API interessate sono obsolete come errore e le chiamate dal codice a tali API avranno esito negativo in fase di compilazione, a meno che l'errore non venga eliminato. Il runtime consentirà le chiamate a BinaryFormatter, indipendentemente dal fatto che la chiamata abbia origine dal codice o da una dipendenza utilizzata.

1I criteri di runtime sono controllati dall'host dell'app. Le chiamate in BinaryFormatter potrebbero comunque non riuscire in fase di esecuzione anche se <EnableUnsafeBinaryFormatterSerialization> è impostata su true all'interno del file di progetto della libreria. Le librerie non possono eseguire l'override dei criteri di runtime dell'host dell'app.

2I runtime Blazor e MAUI vietano le chiamate a BinaryFormatter. Indipendentemente da qualsiasi valore impostato per <EnableUnsafeBinaryFormatterSerialization>, le chiamate avranno esito negativo in fase di esecuzione. Non chiamare queste API da applicazioni Blazor o MAUI o dalle librerie destinate a essere utilizzate dalle app Blazor o MAUI.

Le API interessate

Vedere anche