Condividi tramite


Le API di serializzazione BinaryFormatter generano errori del compilatore

Nell'ambito del piano di deprecazione a lungo termine di BinaryFormatter, continuiamo con la dismissione della funzionalità BinaryFormatter dalle nostre librerie e a disabituare gli sviluppatori all'uso di questo tipo. A partire da .NET 7, le chiamate alle API seguenti generano errori in fase di compilazione per tutti i tipi di progetto C# e Visual Basic:

Comportamento precedente

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

L'utilizzo dell'evento Exception.SerializeObjectState non generava 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 sarà interessato se soddisfa tutti i criteri seguenti:

  • È un progetto C# o Visual Basic.
  • È destinato a net7.0 o versione successiva.
  • Chiama direttamente una delle API interessate.
  • Non prevede già l'eliminazione del codice di avviso SYSLIB0011.

Versione di introduzione

.NET 7

Tipo di modifica che causa un'interruzione

Questa modifica può influire sulla compatibilità dell'origine.

Motivo della modifica

Nell'ambito del piano di deprecazione a lungo termine di BinaryFormatter, continuiamo con la dismissione della funzionalità BinaryFormatter dalle nostre librerie e a disabituare gli sviluppatori all'uso di questo tipo.

La migliore linea di azione consiste nell'eseguire la migrazione da BinaryFormatter a causa dei problemi di sicurezza e affidabilità. BinaryFormatter potrebbe essere rimosso da .NET in una versione futura. Il team delle librerie .NET ha già preso posizione e 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 relativo all'obsolescenza. È anche possibile disabilitare l'errore a livello di progetto impostando una proprietà del progetto che converte l'errore in avviso (in modo che corrisponda al comportamento di .NET 5/6).

Avviso

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

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

Nota

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

Proprietà <EnableUnsafeBinaryFormatterSerialization>

La proprietà <EnableUnsafeBinaryFormatterSerialization è 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 non sia abilitata l'opzione per considerare gli avvisi come errori per l'applicazione o che il codice di avviso SYSLIB0011 non sia stato eliminato. 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. (Come per false.)
App 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 non sia abilitata l'opzione per considerare gli avvisi come errori per l'applicazione o che il codice di avviso SYSLIB0011 non sia stato eliminato. 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 vieterà le chiamate a BinaryFormatter, indipendentemente dal fatto che la chiamata abbia origine dal codice o da una dipendenza utilizzata. (Come 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 non sia abilitata l'opzione per considerare gli avvisi come errori per l'applicazione o che il codice di avviso SYSLIB0011 non sia stato eliminato. 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 vieterà 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 a BinaryFormatter potrebbero comunque non riuscire in fase di esecuzione anche se la proprietà <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 dal 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 da app Blazor o MAUI.

API interessate

Vedi anche