Welcome, once again, to our annual post about the most important conference in the dotnet world: dotnet conf.
Here, we’ll cover a summary of what the three days of talks had in store for us.
Table of Contents
0 - Introduction to .NET 9
.NET is not just a programming language or a framework, it’s a platform that allows us to work across all imaginable fields.
From web to games, and including mobile apps, IoT, desktop, and now, even more so, with AI.
For this, .NET provides us a set of tools and an ecosystem that makes our work easier, and this is the conference where yearly improvements to these tools are showcased.
In my opinion, the .NET ecosystem is the best to work with, thanks to all the work and talent behind it. No other platform, language, framework, or system has so many people working full time to ensure that everything around the languages is of such high quality, and it shows.
By the way, .NET 9 is a short-term version of .NET, which means many of you will probably skip it, waiting for .NET 10 at your company.
1 - Improvements to .NET Aspire in .NET 9
The first thing we saw this year was .NET Aspire, which isn’t surprising since it was last year’s major announcement and the community is eager for improvements to this library.
We already published a post about dotnet aspire. Although I personally think they were inspired by my Distribt library, the reality is that it’s an excellent application for productivity and ease of use when working with distributed systems.
Basically, Aspire simplifies the use of containers, resources, deployments, and even monitoring.
Aspire was launched only a few months ago, so most of the improvements here have been newly added features, such as connecting to almost any database, Azure Functions compatibility, integration with OpenAI, Ollama, etc.
And something very important: automation for deploying to Azure Container Apps, making adoption even faster.
Throughout the conference, we saw many example cases and tutorials on how to work with Aspire. Honestly, if you’re interested, check it out.
Personally, I think that using a monorepo for distributed systems doesn’t work well for distributed enterprise apps. Still, the other features, like OpenTelemetry integration, the dashboard, and what they call integrations (basically Distribt), are crucial for distributed systems—so kudos for that.
If you’re going to watch the conference, keep in mind that almost all the showcased apps were done within Aspire projects. In a few cases, I didn’t see much value added by this, but well, they want to steer people in that direction.
Finally, the announcement of the .NET Aspire Community Toolkit, which is essentially a place to apply integrations. Here is the official announcement.
2 - Artificial Intelligence Integration in .NET 9
Insert AI, AI, AI, AI meme here...
Jokes aside, integrating AI into our systems is now a reality and it’s going to happen—we have to embrace it. The development team is taking the initiative to make that integration easier for developers. For this, we have the Microsoft.Extensions.AI
package, which works as an abstraction over different models and services.
This new package offers integrations with Azure, OpenAI, Llama, Ollama, Qdrant, and more. In a demo by Steve Sanderson, we saw just how simple these integrations are and how powerful AI can be when used properly.
I highly recommend watching the presentation. (I’ll link it here if they upload it separately.)
3 - MAUI Improvements in .NET 9
To be honest, I was expecting an official "end of the line" for MAUI, but I was very pleasantly surprised.
If you’re not up to date, MAUI is a platform for building cross-platform applications for Windows, Mac, and mobile (Android & iOS), officially released in .NET 7. It should have originally launched with .NET 6, but it was delayed by a year, and this ended up hurting it as libraries like Uno Platform and Avalonia jumped ahead.
I thought Microsoft would let it die, but no—they really doubled down, squashing more bugs and adding more features than ever this year.
They also joined forces with Syncfusion for their UI using the MAUI Toolkit.
Let’s see if they keep at it and fully revitalize MAUI, because the opinions I see online aren’t the best.
From my perspective, MAUI still works as a shell for Blazor, so depending on how much use your app expects, it could be the best option:
4 - What’s New in C# 13
We didn’t get to the C# 13 updates until more than three hours into the event, which is unusual because, in previous years, these updates were always shown as one of the very first things.
There’s a simple explanation: there are not as many big changes as before this year; or if there are, they’re not as impactful as past versions, and that might be why they didn’t draw much attention to them.
We already posted a comprehensive article about the what’s new in C# 13 .NET 9.
5 - ASP.NET CORE and Blazor Improvements in .NET 9
Besides the main tracks, there were brief mentions here and there about changes to different systems. Here is what stood out for ASP.NET core and Blazor:
5.1 - New Distributed Cache for .NET9
Until now, we’ve always used IDistributedCache
, and in terms of performance, it’s not the best since it works with key-value pairs where the value is a byte array. The problem is that it’s inefficient in how the bytes are assigned in memory, and it can be affected by what’s known as a cache stampede.
Cache stampede is when many requests are made simultaneously for the same key, and if it’s not cached, they all hit the database.
In .NET 9, we have the new HybridCache
class, which solves all these previous problems. It also adds new features, like supporting in-memory and distributed caching at the same time. For most use-cases, it just works by changing the injected type you configured.
5.2 - SignalR Improvements in .NET 9
Minor SignalR enhancements, such as support for AOT, which is quite important. Polymorphism now works in the hub, and there's an improvement in tracing, which fits nicely with aspire, observability, etc.
6 - Other Talks from dotnetconf 2024
As usual, here’s a quick section to mention some other talks or sessions worth checking out.
6.1 - Azure with .NET 9 and Aspire
Lots of sessions were Azure-related, especially useful for those working with Aspire, as there were several talks focused on it, showing just how easy it is to implement Aspire services on Azure.
6.2 - Removing Swagger in C#
Swagger is no longer included by default in the templates. That’s because the team has created the Microsoft.AspNetCore.OpenApi package, which generates the OpenAPI document much as Swagger did, but is maintained by Microsoft.
If you want to know more about why this change was made, here’s the GitHub thread explaining it.
6.3 - Testing.Framework in .NET
We’ve seen the announcement of a VS test alternative, designed to run tests across multiple environments: your PC, CLI, CI/CD pipeline, etc., since it doesn’t depend on vstest.console or the dotnet test command. It integrates directly with the project, improving portability.
Of note, it’s fully compatible with all current test frameworks. I’ll try to share some examples here on the blog because I found the session very interesting.
6.4 - Blazor and MudBlazor
Since there wasn’t any big Blazor news, I want to mention the MudBlazor library—this is a UI library that makes building apps with Blazor easy. I tried it a couple of years ago for some testing and really liked it. Since there was a talk about it, I thought I’d mention it here.
6.5 - Cross-platform Apps in .NET
As every year, just like with MAUI, there were sessions about Avalonia and UNO Platform, which are today’s most popular options for building cross-platform apps with C#.
Special mention to Héctor Uriel Pérez Rojas, who gave a presentation about a tool he built (https://xamlify.net/) for converting Figma designs to XAML, which I personally thought was great.
If there is any problem you can add a comment bellow or contact me in the website's contact form