| title | titleSuffix | description | ms.date | ai-usage | no-loc | |
|---|---|---|---|---|---|---|
Breaking changes in .NET 10 |
Navigate to the breaking changes in .NET 10. |
09/09/2025 |
ai-assisted |
|
If you're migrating an app to .NET 10, the breaking changes listed here might affect you. Changes are grouped by technology area, such as ASP.NET Core or Windows Forms.
[!INCLUDE binary-source-behavioral]
Note
This article is a work in progress. It's not a complete list of breaking changes in .NET 10.
See Breaking changes in ASP.NET Core 10.
| Title | Type of change |
|---|---|
| Default .NET images use Ubuntu | Behavioral change |
| Title | Type of change |
|---|---|
| CompositeMLDsa updated to draft-08 | Behavioral change |
| CoseSigner.Key can be null | Behavioral/source incompatible change |
| MLDsa and SlhDsa 'SecretKey' members renamed | Source incompatible |
| OpenSSL cryptographic primitives aren't supported on macOS | Behavioral change |
| OpenSSL 1.1.1 or later required on Unix | Behavioral change |
| X500DistinguishedName validation is stricter | Behavioral change |
| X509Certificate and PublicKey key parameters can be null | Behavioral/source incompatible change |
| Environment variable renamed to DOTNET_OPENSSL_VERSION_OVERRIDE | Behavioral change |
See Breaking changes in EF Core 10.
| Title | Type of change |
|---|---|
| BackgroundService runs all of ExecuteAsync as a Task | Behavioral change |
| Fix issues in GetKeyedService() and GetKeyedServices() with AnyKey | Behavioral change |
| Null values preserved in configuration | Behavioral change |
| Message no longer duplicated in Console log output | Behavioral change |
| ProviderAliasAttribute moved to Microsoft.Extensions.Logging.Abstractions assembly | Source incompatible |
| Removed DynamicallyAccessedMembers annotation from trim-unsafe Microsoft.Extensions.Configuration code | Binary incompatible |
| Title | Type of change |
|---|---|
| Environment variable renamed to DOTNET_ICU_VERSION_OVERRIDE | Behavioral change |
| Title | Type of change |
|---|---|
| dotnet.acquire API for VS Code no longer always downloads latest | Behavioral change |
| Title | Type of change |
|---|---|
| Casting IDispatchEx COM object to IReflect fails | Behavioral change |
| Single-file apps no longer look for native libraries in executable directory | Behavioral change |
| Specifying DllImportSearchPath.AssemblyDirectory only searches the assembly directory | Behavioral change |
| Title | Type of change |
|---|---|
| HTTP/3 support disabled by default with PublishTrimmed | Source incompatible |
| MailAddress enforces validation for consecutive dots | Behavioral change |
| Streaming HTTP responses enabled by default in browser HTTP clients | Behavioral change |
Uri length limits removed |
Behavioral change |
| Title | Type of change | Introduced version |
|---|---|---|
| More restricted annotations on InvokeMember/FindMembers/DeclaredMembers | Behavioral/source incompatible | |
| Type.MakeGenericSignatureType argument validation | Behavioral change |
| Title | Type of change |
|---|---|
| System.Text.Json checks for property name conflicts | Behavioral change |
| XmlSerializer no longer ignores properties marked with ObsoleteAttribute | Behavioral change |
| Title | Type of change |
|---|---|
| API obsoletions | Source incompatible |
| Applications referencing both WPF and WinForms must disambiguate MenuItem and ContextMenu types | Source incompatible |
| Renamed parameter in HtmlElement.InsertAdjacentElement | Source incompatible |
| TreeView checkbox image truncation | Behavioral change |
| StatusStrip uses System RenderMode by default | Behavioral change |
| System.Drawing OutOfMemoryException changed to ExternalException | Behavioral change |
| Title | Type of change |
|---|---|
| Empty ColumnDefinitions and RowDefinitions are disallowed | Source incompatible |
| Incorrect usage of DynamicResource causes application crash | Source incompatible/behavioral change |