#603 – April 12, 2026
shifting frameworks like Win32, WPF, UWP, and WinUI have confused developers
Microsoft hasn’t had a coherent GUI strategy since Petzold
8 minutes by Jeffrey Snover
Over decades, shifting frameworks like Win32, WPF, UWP, and WinUI—often disrupted by internal conflicts and changing priorities—have confused developers. Jeffrey says that the problem is not weak technology, but poor coordination and frequent strategic pivots that leave no single, reliable path forward.
Share your thoughts on .NET dev tooling and get a chance to win a reward
sponsored by Jetbrains
JetBrains is conducting a survey to better understand how .NET dev tools impact developer productivity, and your perspective could really help the company make its tooling even better. It takes about 10 minutes to complete and focuses on your real-world experience with the tools. As a thank-you for your time, you’ll have the chance to win a small prize. Take the survey and make your voice count!
C# 14: Introducing interceptors
5 minutes by Anthony Giretti
C# 14 introduces interceptors, a way to silently replace a specific method call with a different one at compile time, with no runtime cost. The compiler swaps the call before producing any binary, making it fully compatible with Native AOT and leaving the developer's source untouched. Interceptors are always generated by Source Generators, never written by hand, since they rely on encoded file positions that change with every edit.
How to delete and update millions of rows in EF Core efficiently
7 minutes by Chris Woodruff
Loading rows into memory before modifying them works fine in development but falls apart at production scale. EF Core 7 added ExecuteUpdate and ExecuteDelete, which run directly on the database without loading any objects, cutting memory use and round-trips dramatically.
Your logout button is lying: ASP.NET session security done right
7 minutes by Martin Stühmer
Martin explains how poor session setup in ASP.NET can create serious security risks. He contrasts common mistakes with secure configurations that meet audit standards. Key practices include setting idle and absolute timeouts, using secure cookie settings, properly invalidating sessions on logout, and rotating JWT tokens. Martin points out that the goal is to move from “it works” to truly secure session management that prevents breaches and passes audits.
Functional programming in C# 15: Union types and the ApiResult Monad
9 minutes by Tore Aurstad
C# has been steadily absorbing ideas from functional programming — pattern matching, records, immutability. With C# 15, we get the feature that ties it all together: union types. Tore walks you through why they matter, how they work, and how they enable a clean ApiResult result monad that eliminates try/catch boilerplate and makes error handling composable.
And the most popular article from the last issue was: