Disable BinaryFormatter across most .NET 8 project types #31591
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ref: https://github.com/dotnet/designs/blob/main/accepted/2020/better-obsoletion/binaryformatter-obsoletion.md
In .NET 7, we obsoleted (as error) the BinaryFormatter APIs, but existing compiled code could still call it and it would work. There was no runtime block except in certain project types like aspnet, Blazor, and MAUI.
In .NET 8, we're flipping this so that BinaryFormatter is now disabled across all project types except WinForms and WPF, which need a little bit more time to work on removal. If you retarget a .NET 7 console application to .NET 8 and that app was using BinaryFormatter under the covers, calls to BF will now fail at runtime.
Just like in .NET 7, applications can continue to use the
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
compat switch to opt back in to restoring BinaryFormatter behavior. Setting that compat switch suppresses both the compile-time error (same as .NET 7) and the .NET 8 runtime disablement.For more information on the matrix, see the comment in Microsoft.NET.Sdk.targets within this PR.