Iron Suite for .NET
10 .NET libraries. One complete document suite.
Migrating to .NET 11? Check These Breaking Changes First
.NET 11 is close, and the breaking changes list is already up. We went through it line by line so you can walk into the upgrade knowing what to look for.
That is good news, but it also makes migration testing more important.
Many applications will still compile cleanly after retargeting to .NET 11. The bigger risk is behavioral change: code that builds successfully but throws a new exception, handles data differently, or produces slightly different results at runtime.
Instead of walking through every compatibility item one by one, this guide focuses on the changes most likely to affect real applications and what you should test before moving to production.
The whole thing in one table
| Change | What happens |
|---|---|
| ZIP reading validates CRC32 | Throws InvalidDataException on corrupt entries |
DateOnly/TimeOnly TryParse | Throws on invalid format or style |
BackgroundService failure | Host throws on startup/shutdown |
| Math.Round correctness | Returns correctly rounded results |
| Extensions in shared framework | Assembly version resolution can shift |
| Build and test tooling | VSTest, NuGet, template-engine changes |
The one we'd check first: ZIP reading now throws
This is the change most likely to surprise a document-heavy codebase, because it is silent until it isn't. Starting in .NET 11, System.IO.Compression validates the CRC32 checksum when you read a ZIP entry, and throws InvalidDataException if the stored checksum doesn't match the data. Previously, a corrupted or tampered entry read straight through with no complaint.
That is a genuinely good change, you want to know when a file is bad, but if your app ingests ZIP files from users, partners, or an old storage bucket, code that "worked" for years can start throwing. The fix is small: wrap your read in a try-catch for InvalidDataException and decide how you want to handle a bad archive. Better to catch it on purpose than to discover it in production.
The sneaky one: TryParse can now throw
Every .NET developer has internalized that TryParse never throws, it returns a bool. In .NET 11, DateOnly.TryParse, TimeOnly.TryParse, and their TryParseExact siblings break that habit slightly: pass an invalid DateTimeStyles value or a bad format specifier and they now throw ArgumentException instead of quietly returning false. If your format strings and styles are hardcoded and valid, nothing changes. If they are computed at runtime or come from user input, that is a new exception path to cover.
Check only if it's your world
The rest are narrower, and grouped by where they live:
- ASP.NET Core. Old Blazor APIs marked obsolete years ago no longer compile. Kestrel is stricter about malformed HTTP headers. And if your SQL connection string uses Entra ID (
Active Directory) auth, you now need theMicrosoft.Data.SqlClient.Extensions.Azurepackage, this also catches EF Core SQL Server users. - Extensions and hosting. Worker services fail louder: if a
BackgroundServicethrows, the host throws too, so test your startup path. - Core libraries.
Math.Roundand complex numbers got more standards-correct, which only matters if tests expect the old values. - Build and tooling. VSTest drops Newtonsoft.Json, template packages drop netstandard2.0. These surface as build errors, so they announce themselves.
- Platform. Minimum CPU requirements went up, .NET MAUI needs Android API 24, and TLS server-side certificate fetching is off by default. You'll know if those are you.
One thing you won't have to worry about
While you are auditing dependencies for .NET 11 readiness, your document tooling shouldn't be on the list. The Iron Suite libraries are pure managed .NET and already run across .NET 11 through .NET Framework, so IronPDF, IronXL, and the rest of the suite move with your app instead of blocking it. Worth noting given that the ZIP change above lives right next to the kind of file-handling code these libraries replace, if you have hand-rolled document or archive plumbing, a migration is a natural moment to hand that part to a library that already tracks each .NET release.
For the complete list, including the ASP.NET Core changes that live on their own page, the Microsoft .NET 11 breaking changes reference is the source to bookmark. We will update this post as that list grows, since it is still filling in.