#561 – June 15, 2025
highlights from the biggest .NET conference
Catch up on Microsoft Build 2025
10 minutes by .NET Team
.NET Team shares highlights from Microsoft's Build 2025 conference. The event included several key developments for .NET developers, with AI integration being a central theme. It showcased Microsoft Extensions for AI, .NET Aspire reaching production readiness, and significant developer experience improvements like running C# without project files.
Building a Data Warehouse with ETLBox: A .NET Developer’s Guide
sponsored by ETLBox
Designing and maintaining a data warehouse involves complex challenges—from handling slowly changing dimensions to keeping fact tables synchronized and accurate. This article walks through the practical setup of a star schema in .NET using data flow-based processing. It covers surrogate keys, incremental loads, dimension versioning (SCD Type 1 and 2), and performance strategies. The approach supports large datasets and enables reliable, testable pipelines for long-term scalability.
Why learn genetic algorithms in C#?
4 minutes by Chris Woodruff
Chris introduces genetic algorithms as an evolutionary programming technique that allows code to iteratively improve solutions to complex problems without manually coding every edge case. Genetic algorithms are particularly valuable when traditional programming approaches fail due to vast or nonlinear search spaces, highlighting their applications in route optimization, scheduling, game AI, and more.
API contracts and nullability in ASP.NET Core
2 minutes by Bart Wullems
Bart shares what happened when he enabled the nullability feature in an ASP.NET Core application. An unexpected breaking change: a previously optional header parameter (X-Environment) suddenly became required, causing integration tests to fail.
Handling exceptions with Task.WaitAll and Task.WhenAll
6 minutes by Davide Bellone
Learn how Task.WaitAll and Task.WhenAll behave when errors occur during asynchronous operations in C#. The key difference lies in their exception handling mechanisms: WaitAll provides comprehensive error details through AggregateException.InnerExceptions, while WhenAll needs additional handling to access all thrown exceptions.
The Delegate RequestDelegate does not take X arguments
5 minutes by Christian Nagel
Christian explains that when converting .NET minimal APIs from using the Results class to TypedResults for better documentation, developers often encounter confusing compiler errors related to delegate arguments. The issue occurs because TypedResults methods return different specific types rather than a common IResult interface.
And the most popular article from the last issue was: