Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- evento System.Exception.SerializeObjectState
- Metodo BinaryFormatter.Serialize
- Metodo BinaryFormatter.Deserialize
- Metodo Formatter.Serialize(Stream, Object)
- Metodo Formatter.Deserialize(Stream)
- Metodo IFormatter.Serialize(Stream, Object)
- Metodo IFormatter.Deserialize(Stream)
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.
Azione consigliata
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
- 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)