Start Debugging

The .NET 10 tracker

One bookmark for the .NET 10 LTS release.

This site uses Walter, an AI agent, for research, writing, and maintenance. Editorial and verification process

This pillar collects the site’s posts about .NET 10, the long-term support (LTS) release: new runtime and library features, upgrade errors, and the ecosystem packages that moved to it.

What to read first

For the overview, start with what’s new in .NET 10 and what’s new in C# 14. On the runtime side, stack allocation of value-type arrays, array enumeration de-abstraction and SearchValues show where the JIT and BCL got faster. For security, post-quantum cryptography with ML-KEM, ML-DSA and SLH-DSA covers the new APIs.

Upgrading from .NET 8? NuGet package pruning is on by default, and the surprises usually come from the SDK: API endpoints that return 401 instead of redirecting to login, conflicting static assets with the same target path, and Blazor routable components in another assembly. For MAUI, what’s new in .NET MAUI 10 is the starting point.

What’s on this page

The list below auto-collects posts tagged dotnet-10, newest first. For the next release, see the .NET 11 tracker; companion pillars are C# 14 features and the ASP.NET Core 11 cheat sheet.

Index (108 posts)

2026 / 11

  • How to tell the C# nullable analyzer a member is not null when HasValue is true

    Put [MemberNotNullWhen(true, nameof(X), nameof(Y))] on the HasValue property itself, naming the members that become non-null. It works for nullable value types and reference types, but the compiler barely checks the getter, ignores base-class members, and never notices when the state changes afterwards. Verified on .NET 10 SDK 10.0.302 and .NET 11 RC3.

  • Why does string.GetHashCode() return a different value every run in .NET?

    Since .NET Core, string.GetHashCode() is seeded with a random per-process value (Marvin hashing), so the same string hashes differently in every process. Why the runtime does it, which types are affected (HashCode.Combine, ValueTuple, records with string members), how Dictionary<string, T> quietly avoids the cost, and how to get a stable hash with XxHash3 or FNV-1a, verified on .NET 10.0.10.

2026 / 10

2026 / 09

2026 / 08

2026 / 05

  • .NET MAUI 10 SR6 finishes Material 3 on Android behind a single UseMaterial3 flag

    MAUI 10 SR6 (10.0.60) extends Material 3 theming to Button, Entry, SearchBar, DatePicker, Slider, ProgressBar, ImageButton, Switch, and Shell on Android. Opt in with one MSBuild property. No custom renderers, no styles.xml edits.

  • async void vs async Task in C#: when each is correct

    async Task is the default and async void is the exception. Use async void only for event handlers, top-level message-loop handlers, and a handful of framework callbacks that demand a void signature. Everywhere else, async Task wins on exceptions, composition, and testability.

  • NuGet Package Pruning Is On by Default in .NET 10

    NuGet Package Pruning shipped on-by-default for net10.0 projects, cutting transitive vulnerability reports by 70% and restore times by up to 50%.

  • record vs class vs struct in C#: a decision matrix

    C# 14 gives you four data-type shapes -- class, record class, struct, and record struct. This is the decision matrix: when each one is correct, what each one costs, and the rules that pick for you.

  • Fix: C# 14 overload resolution breaking change with Span and ReadOnlySpan

    After upgrading to C# 14 / .NET 10, calls like array.Contains, x.Reverse(), and MemoryMarshal.Cast suddenly bind to different overloads or stop compiling. Here is what changed and how to pin the old behaviour where it matters.

  • How to Expose an EF Core Database to an AI Agent via MCP

    Wire an EF Core 10 DbContext into a Model Context Protocol server so Claude Code, Cursor, or any compliant client can run safe, scoped queries against your database. Covers IDbContextFactory lifetime, read-only projections, schema discovery tools, AsNoTracking, parameterised filters, row-level scoping, and the destructive-tool gates you need before letting an agent touch UPDATE.

2026 / 04

2026 / 03

2026 / 02

2026 / 01

2025 / 04

2024 / 12

  • What’s new in C# 14.0

    A summary of all new features in C# 14.0, including the field keyword, extension members, null-conditional assignment, implicit span conversions, and more.

  • What’s new in .NET 10

    What's new in .NET 10: LTS release with 3 years of support, new JIT optimizations, array devirtualization, stack allocation improvements, and more.

All pillars Home