$ cat dotnet/month/2026-08-01.log
the month in review · August 2026
F# interpolated strings and record spreads land as Orleans and runtime harden
August delivered two new F# language features, a wave of hardening across Orleans, MAUI, and the runtime, and a steady stream of security fixes that make this month's upgrades worth scheduling.
F# shipped two expressive language features. The first implements interpolated strings via String.Concat, and the second adds record spreads `{ ...expr }` and `{ ...ty }`. Both target F#'s core language and the compiler team frames them as the core of VS 18.11 preparation, though each PR's description notes the trade-off: interpolated strings land without full native AOT support yet, while record spreads offer a flexible way to copy and override records.
Orleans hardened serialization and reminders. The default JSON storage serializer now enforces a type allow-list, a breaking change that requires explicit registration of allowed types. Meanwhile, the developers dropped reminders that are not due soon, improving performance for silos that carry a large reminder load. The team also enabled nullable reference types across the Orleans codebase, which flags potential null dereferences at compile time. The distributed directory now supports rolling upgrades, letting operators update a cluster without a full restart.
The runtime improved native call generation and data structures. The LibraryImportGenerator now supports unsafe evolution of method signatures over time, which side-steps the string allocator's previous behavior on .NET. On the trimming and AOT side, the runtime stripped dead code and fixed trimmer dataflow bugs across code paths, and native AOT debugging received a significant overhaul. The runtime also cut XML deserialization from O(N^2) to linear, solved ComWrapper lock contention, and applied the `*.runtimeconfig.dev.json` configuration to CoreCLR apps, closing a long-standing gap.
MAUI locked in .NET 11.0 and reworked its build pipeline. It automated clean inter-branch forward merges, fixed bot-opened merge policy matching, and removed an ineffective blanket integration-test retry. ASP.NET Core shipped passkey endpoints and a new experimental DirectTLS transport for Kestrel, which also blocks malformed SNI hostnames. The .NET Foundation pulled iOS metrics into focus as Android CI tightened, and infrastructure teams removed a stale secret group from MSBuild. FSharp canary builds restored codegen integrity after a regression, and Roslyn reverted an editor change that broke sync.
Security and correctness fixes landed across WPF, MAUI, and ASP.NET Core. WPF added CodeQL comments to clarify trusted input handling in resource generation, and Roslyn hardened Razor formatting after a breaking split between declaration and implementation files. The team shipped a fix for an MSBuild telemetry bug that could kill builds, and a SignalR update closed a duplicate stream hole. As the month closed, codeflow syncs landed across dotnet and windowsdesktop, keeping branches aligned.
This month's changes are broad but not dramatic. The headline features are F#'s new syntax, which will reward a fresh look; the breaking Orleans serialization change and the MAUI merge pipeline improvements are worth scheduling into your next upgrade cycle. Security patches across the runtime and MAUI should be applied before your next deploy.
References
- [1] Implement interpolated strings via String.Concat ↗ dotnet/fsharp
- [2] Record spreads: `{ ...expr }`, `{ ...ty }` ↗ dotnet/fsharp
- [3] fix(serialization)!: enforce type allow-list in default JSON storage serializer (#10268) ↗ dotnet/orleans
- [4] perf(reminders): drop reminders that are not due soon (#10259) ↗ dotnet/orleans
- [5] refactor: enable nullable reference types across Orleans (#10291) ↗ dotnet/orleans
- [6] fix(directory): support rolling upgrades to distributed directory (#10309) ↗ dotnet/orleans
- [7] Support unsafe evolution in LibraryImportGenerator ↗ dotnet/runtime
- [8] Apply `*.runtimeconfig.dev.json` to CoreCLR apps ↗ dotnet/android
- [9] Remove temporary array allocations in `ComVariant.As`. (#131704) ↗ dotnet/runtime
- [10] Auto-merge clean inter-branch forward merges ↗ dotnet/maui
- [11] Fix bot-opened inter-branch merge policy matching ↗ dotnet/maui
- [12] Remove ineffective blanket integration-test retry (#36994) ↗ dotnet/maui
- [13] Add CodeQL comments to clarify trusted input handling in ResourcesGen… ↗ dotnet/wpf
- [14] Handle textDocument/didChange notifications that don't pass across the range (#84714) ↗ dotnet/roslyn
- [15] Restore stress guards on process-isolated IL tests (#131769) dotnet/runtime
$ ls dotnet/month/ # the briefings behind this review