When Your Source Generator Creates More Coupling Than It Solves: Designing for Testability
Source generators are a fantastic way to eliminate boilerplate. But there's a dark side: they can quietly introduce coupling that makes your tests bri...
Cut through the noise with deep dives into high-performance .NET, memory optimization, and system design—curated for experienced C# developers who build mission-critical software.
Source generators are a fantastic way to eliminate boilerplate. But there's a dark side: they can quietly introduce coupling that makes your tests bri...
You've built a Roslyn rewriter that transforms syntax trees. It works great on a full build. But then you run it inside the IDE—and suddenly every key...
You write a diagnostic. It compiles. You run the analyzer. Nothing. No squiggle, no error list entry, no log message. The pipeline just swallowed it. ...
You open the same solution in Visual Studio. Analyzers light up in the error list. Then you run dotnet assemble on the CI server—and half the warnings...
You've written a Roslyn analyzer that works fine in one project. Then you throw in a second compilation—maybe a test project referencing the first—and...
You've been there. You write a Roslyn analyzer that tweaks a syntax node—maybe you add a null check, or remove a dead branch. You run the analyzer, an...
You've done it. Published your .NET app with Native AOT, got that solo exe file, and copied it over to your coworker's laptop. Double-click. Nothing. ...
You've been debugging a crash for hours. The stack trace points to a native library call, but the managed side shows nothing—no exception, no error co...
You've gone Native AOT. Startup is snappy. Binary is lean. But then you call into that old C++ library via PInvoke, and things start breaking in weird...
You've got a native library to call. Old habit: write a DllImport declaration, decorate with MarshalAs , and call it a day. But then you flip on Nativ...
You've shipped a Native AOT app. It boots fast, memory is tight, and you're feeling good. Then you need to pass a managed delegate to a native library...
You're a C# developer. Not a tourist. You've got commits to ship, a legacy monolith breathing down your neck, and maybe a new feature that demands mod...