Breaking changes in .NET 8
If you're migrating an app to .NET 8, the breaking changes listed here might affect you. Changes are grouped by technology area, such as ASP.NET Core or Windows Forms.
This article categorizes each breaking change as binary incompatible or source incompatible, or as a behavioral change:
Binary incompatible - When run against the new runtime or component, existing binaries may encounter a breaking change in behavior, such as failure to load or execute, and if so, require recompilation.
Source incompatible - When recompiled using the new SDK or component or to target the new runtime, existing source code may require source changes to compile successfully.
Behavioral change - Existing code and binaries may behave differently at run time. If the new behavior is undesirable, existing code would need to be updated and recompiled.
ASP.NET Core
Title | Type of change |
---|---|
ConcurrencyLimiterMiddleware is obsolete | Source incompatible |
Custom converters for serialization removed | Behavioral change |
ISystemClock is obsolete | Source incompatible |
Minimal APIs: IFormFile parameters require anti-forgery checks | Behavioral change |
Rate-limiting middleware requires AddRateLimiter | Behavioral change |
Security token events return a JsonWebToken | Behavioral change |
TrimMode defaults to full for Web SDK projects | Source incompatible |
Containers
Title | Type of change |
---|---|
'ca-certificates' package removed from Alpine images | Binary incompatible |
Debian container images upgraded to Debian 12 | Binary incompatible/behavioral change |
Default ASP.NET Core port changed to 8080 | Behavioral change |
Kerberos package removed from Alpine and Debian images | Binary incompatible |
'libintl' package removed from Alpine images | Behavioral change |
Multi-platform container tags are Linux-only | Behavioral change |
New 'app' user in Linux images | Behavioral change |
Core .NET libraries
Cryptography
Title | Type of change | Introduced |
---|---|---|
AesGcm authentication tag size on macOS | Behavioral change | Preview 1 |
RSA.EncryptValue and RSA.DecryptValue obsolete | Source incompatible | Preview 1 |
Deployment
Title | Type of change |
---|---|
Host determines RID-specific assets | Binary incompatible/behavioral change |
.NET Monitor only includes distroless images | Behavioral change |
StripSymbols defaults to true | Behavioral change |
Entity Framework Core
Extensions
Title | Type of change |
---|---|
ActivatorUtilities.CreateInstance behaves consistently | Behavioral change |
ActivatorUtilities.CreateInstance requires non-null provider | Behavioral change |
ConfigurationBinder throws for mismatched value | Behavioral change |
ConfigurationManager package no longer references System.Security.Permissions | Source incompatible |
DirectoryServices package no longer references System.Security.Permissions | Source incompatible |
Empty keys added to dictionary by configuration binder | Behavioral change |
HostApplicationBuilderSettings.Args respected by HostApplicationBuilder ctor | Behavioral change |
ManagementDateTimeConverter.ToDateTime returns a local time | Behavioral change |
System.Formats.Cbor DateTimeOffset formatting change | Behavioral change |
Globalization
Title | Type of change |
---|---|
Date and time converters honor culture argument | Behavioral change |
TwoDigitYearMax default is 2049 | Behavioral change |
Interop
Title | Type of change |
---|---|
CreateObjectFlags.Unwrap only unwraps on target instance | Behavioral change |
Custom marshallers require additional members | Source incompatible |
IDispatchImplAttribute API is removed | Binary incompatible |
JSFunctionBinding implicit public default constructor removed | Binary incompatible |
SafeHandle types must have public constructor | Source incompatible |
Networking
Title | Type of change |
---|---|
SendFile throws NotSupportedException for connectionless sockets | Behavioral change |
User info in mailto: URIs is compared |
Behavioral change |
Reflection
Title | Type of change |
---|---|
IntPtr no longer used for function pointer types | Behavioral change |
SDK
Serialization
Title | Type of change |
---|---|
BinaryFormatter disabled for most projects | Behavioral change |
PublishedTrimmed projects fail reflection-based serialization | Behavioral change |
Reflection-based deserializer resolves metadata eagerly | Behavioral change |
Windows Forms
Title | Type of change |
---|---|
Anchor layout changes | Behavioral change |
Certs checked before loading remote images in PictureBox | Behavioral change |
DateTimePicker.Text is empty string | Behavioral change |
DefaultValueAttribute removed from some properties | Behavioral change |
ExceptionCollection ctor throws ArgumentException | Behavioral change |
Forms scale according to AutoScaleMode | Behavioral change |
ImageList.ColorDepth default is Depth32Bit | Behavioral change |
System.Windows.Extensions doesn't reference System.Drawing.Common | Source incompatible |
TableLayoutStyleCollection throws ArgumentException | Behavioral change |
Top-level forms scale minimum and maximum size to DPI | Behavioral change |
WFDEV002 obsoletion is now an error | Source incompatible |