Blog

BackBack to Blogs

What’s new in .NET 10?


.NET 10 was released this November at .NET Conf 2025. In this post, we’ll update you on the things that we think matter most. There’s always a lot to cover when new .NET versions drop, so we’ll stay focused on the things that caught our eye.

What to expect with each .NET release:

  • New version of C#
  • NET Core Improvements
  • EF Core Improvements
  • Performance
  • Visual Studio updates
  • … and more!

Support

.NET 10 is a Long-Term Support (LTS) version. LTS releases stay in support for 3 years. While under support you receive support from MS on bugs, issues, and Azure services. Within the last year, MS announced that Standard-Term Support (STS) versions of .NET will be receiving additional support moving forward. Previously, they were supported for 18 months, but now they’ll get 24 months of support. You can read more here -> https://devblogs.microsoft.com/dotnet/dotnet-sts-releases-supported-for-24-months/

 

C# 14

Another .NET release means we get another version of C#. As we’ve seen C# grow and evolve, we see the language taking notes from functional programming concepts and they are always adding syntactic sugar. One day we’ll get discriminated unions, but not quite yet. We’ll touch on a few new additions below.

 

Extension Members

Extension Members is a new term encapsulating extension methods, extension properties, and operator overloads. It also brings some syntactic sugar that allows us to define our members in extension blocks. These extension blocks allow us to create extension members without using the this keyword. It’s also handy for grouping extension members on the same type.

Extension Members before and after code examples

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

 

Null-conditional assignment

Null conditional assignment does pretty much exactly what it sounds like. It allows us to assign a property on an object, if that object is not null, in a one-line nature.

Null-Conditional Assignment code example

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-14.0/null-conditional-assignment

 

The field keyword

C# 14 introduces a new keyword field that allows you to access the automatically created, under-the-hood, backing field on a property. This addition unlocks additional capabilities when defining custom setters. Previously, you would need to explicitly declare the backing field to implement this custom setter . Below is an example of what you can do with this new feature.

field keyword example code

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/field 

ASP.NET Core

Minimal API Validation Support

Since the introduction of minimal APIs in 2021, we’ve seen features roll out to bring them closer in feature parity to traditional MVC controllers. In version 10, we see Microsoft bring rich DataAnnotation validation support to minimal APIs. The only thing you need to make sure and do is add the builder.Services.AddValidation(); line to your Program.cs.

Data annotations example code

 

Data annotations http file example

 

Server Sent Events (SSE) Support

While it was possible to achieve server-sent events in prior versions of ASP.NET Core, new functionality makes it much easier in version 10. TypedResults.ServerSentEvents is a new return type that can be used in conjunction with yield return to make setting up SSE a breeze. SSE is a common technology used when interacting with LLMs, so we suspect that’s the reason we are getting this added support.

Server Sent Events example code

 

SSE example display 

 

OpenAPI Support

With Microsoft’s recent pivot away from Swashbuckle in .NET 9, the train has been full steam ahead with OpenAPI. Version 9 removed the dependency on Swashbuckle. Version 10 expands the support for OpenAPI. There are a few breaking changes to support OpenAPI 3.1 in the new version of Microsoft.OpenApi (2.0.0). If you want more details on upgrading, check out this portion of the docs => https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-10.0?view=aspnetcore-10.0#upgrade-microsoftopenapi-to-200

 

Blazor

Blazor continues to grow, and Microsoft continues to improve Blazor in version 10. With over 35 new things to discuss in Blazor, we don’t have the ability to cover everything new in this blog post, but you can be sure that Microsoft is continuing to foster and grow the technology. Meanwhile, Blazor developers continue to yearn for hot reload.

https://www.youtube.com/watch?v=xZ26KwGHWE0

Comments on recent Blazor video from Microsoft

 

EF Core

While EF Core 10 introduces many new features and added support for things like Azure SQL and Cosmos DB, we’ll focus on more of the cross-cutting features.

 

Improved Translation for Collections

In .NET 8, EF added a new translation for collection parameters that leveraged JSON support to generate SQL that was nicer to the SQL engine in terms of plan cache hits. In .NET 10, they’ve changed this implementation to parameterize each item in the collection into the query. It will also “pad” the number of parameters to increase the number of cache hits. For translations like these, you get the benefit for free just by upgrading! 

https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-10.0/whatsnew#improved-translation-for-parameterized-collection

 

Named Query Filters

Global query filters are a feature that has been in EF for a while, but they’ve now added a way to name your query filters such that you can disable them while querying in any calling code.

Adding a named query filter:

Configuring a named query filter example code

 

Seed some data:

Seeding data example code

 

Query filtering is on by default:

Default query filtering example code

 

Ignore named query filter:

Ignored query filtering example code

 

Results:

Query filtering example console results

https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-10.0/whatsnew#named-query-filters

 

Performance

As per usual, if you want to know about the performance improvements under the hood, Stephen Toub has you covered. Check out his blog post here => Performance Improvements in .NET 10 - .NET Blog. Take a gander at the scroll bar, lots of free performance improvements to be had!

Visual Studio 2026

Visual Studio 2026 is the next iteration of Visual Studio. Pr, the new editor comes loaded with added Copilot-powered functionality, improved performance, and some visual updates. For most of us, that might just mean that we switch from dark mode to “Spicy Red”. Gotta say, I really think Microsoft is taking notes from jowtow-bloodmoon-theme on this one!

Screenshot of the new ‘Spicy Red’ theme in Visual Studio

https://marketplace.visualstudio.com/items?itemName=jowtow.jowtow-bloodmoon-theme

https://devblogs.microsoft.com/visualstudio/visual-studio-2026-insiders-is-here/

 

SLNX

While not officially a .NET thing, the introduction of .slnx is too exciting not to mention. If you’ve ever had to manually modify a .sln file in Visual Studio, you know that the file format leaves a lot to be desired. .slnx is the new default solution file format going forward and it uses simple XML rather than the gobbledygook guids that we’ve come to know and despise. Read more about .slnx here -> https://devblogs.microsoft.com/visualstudio/new-simpler-solution-file-format/

 

New Settings and Extensions Pages

While I was poking around in the new Visual Studio 2026 Insiders, I also noticed that the settings and extensions UI have been improved.

Old:

Old settings UI screenshot

 

New:

New settings UI screenshot

 

SDK

The dotnet cli sees a few new features as well in .NET 10. Mostly small quality of life and syntactic sugar things.

 

One-shot Tool Execution

dotnet tool exec is a new command that allows you to run a .NET tool without needing to install it on a global or local level. Think of it like npx in node. This type of functionality is super useful for ephemeral tooling needs like your automated build pipelines.

dotnetsay example cli with dotnet tool exec

 

You can also shorthand this with dnx.

dotnetsay example cli with dnx

 

File-based apps

Most likely to increase adoption, the .NET team has added support for csproj-less apps. You can now run .cs files just by running:

dotnet run helloworld.cs

There are some additional nuances to this new functionality. For instance, if you need to reference a NuGet package, you need to use #:package at the top of your file. Pretty neat!

 

Breaking Changes

Since .NET 5, the scope of breaking changes in new .NET versions has been relatively miniscule. Most of the issues we see when upgrading seems to come from NuGet dependencies.

One notable breaking change is the addition of the new “field” keyword. If you have any existing fields named “field”, that will take a bit of work to fix.

If you want to learn more about breaking changes, check out the links below.

https://learn.microsoft.com/en-us/dotnet/core/compatibility/10.0

https://duendesoftware.com/blog/20251104-dotnet-10-breaking-changes-to-keep-an-eye-on-when-upgrading

 

And so much more!

We covered some neat things coming in .NET 10, but there’s so much more than we were able to cover. Make sure to keep an eye out for all things Aspire, Blazor, and F# as well!  Check out What's new in .NET 10 | Microsoft Learn if you want to keep digging!

 

Summary – should I upgrade?

Absolutely. .NET 10 is the best version of .NET yet. Upgrading will give you many free performance improvements and features. It will also keep you current and on the ball. If you need help upgrading your .NET projects, let us know! We’ve seen many successful .NET upgrades through and would be happy to help. Thanks for reading! 

 

Looking for some more .NET content? Missed updates from the last few .NET versions? Check out these posts!
History of .NET - https://omnitech-inc.com/blog/the-history-of-net/

.NET 9 - https://omnitech-inc.com/blog/what-s-new-in-net-9/

.NET 8 - https://omnitech-inc.com/blog/what-s-new-in-net-8/