Kirill Osenkov
@kirillosenkov.com
(Unofficial) VP of Developer Productivity at Microsoft. Developer tools, engineering systems, .NET, C#, Roslyn, Visual Studio, Editor, WPF, Avalonia, MSBuild.
New in MSBuild Structured Log Viewer:
property trail showing reads and writes during evaluation, in order:
github.com/KirillOsenko...
If you've ever had ordering issues where someone reads your property before you wrote to it, this is the tool for you.
property trail showing reads and writes during evaluation, in order:
github.com/KirillOsenko...
If you've ever had ordering issues where someone reads your property before you wrote to it, this is the tool for you.
November 7, 2025 at 3:04 AM
New in MSBuild Structured Log Viewer:
property trail showing reads and writes during evaluation, in order:
github.com/KirillOsenko...
If you've ever had ordering issues where someone reads your property before you wrote to it, this is the tool for you.
property trail showing reads and writes during evaluation, in order:
github.com/KirillOsenko...
If you've ever had ordering issues where someone reads your property before you wrote to it, this is the tool for you.
I even see which repository it was (it has been deleted or made private), but there's no way to clear or delete it:
September 29, 2025 at 2:34 AM
I even see which repository it was (it has been deleted or made private), but there's no way to clear or delete it:
I just wrote a Roslyn refactoring! I have to say the Roslyn API is beautiful and I loved the experience.
gist.github.com/KirillOsenko...
gist.github.com/KirillOsenko...
September 26, 2025 at 1:02 AM
I just wrote a Roslyn refactoring! I have to say the Roslyn API is beautiful and I loved the experience.
gist.github.com/KirillOsenko...
gist.github.com/KirillOsenko...
Phantom notifications bother me way more than they should
September 18, 2025 at 3:09 AM
Phantom notifications bother me way more than they should
I just learned that Directory.GetFiles with pattern 1.txt.* matches 1.txt, and it's the OS behavior:
September 5, 2025 at 6:07 PM
I just learned that Directory.GetFiles with pattern 1.txt.* matches 1.txt, and it's the OS behavior:
OK I really don't like what's going on here:
August 25, 2025 at 5:37 AM
OK I really don't like what's going on here:
Hmm, I have to confess, this is unexpected for me. Lowercase letters come before uppercase? Intuitively it feels that uppercase should come first?
August 25, 2025 at 5:09 AM
Hmm, I have to confess, this is unexpected for me. Lowercase letters come before uppercase? Intuitively it feels that uppercase should come first?
Just saw an Ioniq 5 N on the road for the first time, looks great
August 21, 2025 at 4:49 PM
Just saw an Ioniq 5 N on the road for the first time, looks great
I was always annoyed by the StringBuilder API Append/AppendLine and that it returns a StringBuilder, so not convertible to an Action<string>.
I have recently started using StringWriter instead (it's a very thin wrapper around StringBuilder), but now it's a proper TextWriter, and I'm very happy.
I have recently started using StringWriter instead (it's a very thin wrapper around StringBuilder), but now it's a proper TextWriter, and I'm very happy.
August 2, 2025 at 10:34 PM
I was always annoyed by the StringBuilder API Append/AppendLine and that it returns a StringBuilder, so not convertible to an Action<string>.
I have recently started using StringWriter instead (it's a very thin wrapper around StringBuilder), but now it's a proper TextWriter, and I'm very happy.
I have recently started using StringWriter instead (it's a very thin wrapper around StringBuilder), but now it's a proper TextWriter, and I'm very happy.
added MSBuild target graph visualizer too:
July 30, 2025 at 9:01 PM
added MSBuild target graph visualizer too:
yes, your problem is Kahua.generators.dll
not sure what that is, clearly some third-party thing
not sure what that is, clearly some third-party thing
July 29, 2025 at 5:46 PM
yes, your problem is Kahua.generators.dll
not sure what that is, clearly some third-party thing
not sure what that is, clearly some third-party thing
Happy "Unicode calendar emoji shows the actual current date" day to all those who celebrate:
quickinfo.io?calendar
quickinfo.io?calendar
July 17, 2025 at 6:55 PM
Happy "Unicode calendar emoji shows the actual current date" day to all those who celebrate:
quickinfo.io?calendar
quickinfo.io?calendar
New in MSBuild Structured Log Viewer:
Project Reference Graph
New tab that shows the project graph layered by project "height". Each project only references projects above it.
Clicking a project highlights all directly referenced projects above, and all projects below it that reference this one.
Project Reference Graph
New tab that shows the project graph layered by project "height". Each project only references projects above it.
Clicking a project highlights all directly referenced projects above, and all projects below it that reference this one.
June 21, 2025 at 2:33 AM
New in MSBuild Structured Log Viewer:
Project Reference Graph
New tab that shows the project graph layered by project "height". Each project only references projects above it.
Clicking a project highlights all directly referenced projects above, and all projects below it that reference this one.
Project Reference Graph
New tab that shows the project graph layered by project "height". Each project only references projects above it.
Clicking a project highlights all directly referenced projects above, and all projects below it that reference this one.
Ran into the situation again where updating VS broke incremental builds, because a different compiler version is now being stamped into the embedded PDB, invalidating all caches and resulting in different PE file bytes from identical sources.
Glad I invested in the fancy PE parser and differ!
Glad I invested in the fancy PE parser and differ!
May 31, 2025 at 8:39 PM
Ran into the situation again where updating VS broke incremental builds, because a different compiler version is now being stamped into the embedded PDB, invalidating all caches and resulting in different PE file bytes from identical sources.
Glad I invested in the fancy PE parser and differ!
Glad I invested in the fancy PE parser and differ!
I wrote a simple tokenizer and translator from Mandarin to English, that translates per-word, as opposed to whole sentences. Turns out both the tokenizer and the dictionary are freely available and open-source, so I just added them to quickinfo.io:
quickinfo.io?%E6%88%91%E7...
quickinfo.io?%E6%88%91%E7...
May 27, 2025 at 1:23 AM
I wrote a simple tokenizer and translator from Mandarin to English, that translates per-word, as opposed to whole sentences. Turns out both the tokenizer and the dictionary are freely available and open-source, so I just added them to quickinfo.io:
quickinfo.io?%E6%88%91%E7...
quickinfo.io?%E6%88%91%E7...
May 20, 2025 at 6:25 PM
New feature in MSBuild Structured Log Viewer: Target Graph!
It parses the preprocessed XML and constructs the target graph where edges are BeforeTargets, DependsOnTargets and AfterTargets.
It parses the preprocessed XML and constructs the target graph where edges are BeforeTargets, DependsOnTargets and AfterTargets.
May 12, 2025 at 4:21 AM
New feature in MSBuild Structured Log Viewer: Target Graph!
It parses the preprocessed XML and constructs the target graph where edges are BeforeTargets, DependsOnTargets and AfterTargets.
It parses the preprocessed XML and constructs the target graph where edges are BeforeTargets, DependsOnTargets and AfterTargets.
MSBuild target graph. Hope it helps!
April 25, 2025 at 2:36 AM
MSBuild target graph. Hope it helps!
Protest against Trump and Musk in downtown Bellevue 🇺🇦
March 1, 2025 at 7:33 PM
Protest against Trump and Musk in downtown Bellevue 🇺🇦
there's also this:
github.com/KirillOsenko...
github.com/KirillOsenko...
February 3, 2025 at 7:58 AM
there's also this:
github.com/KirillOsenko...
github.com/KirillOsenko...
Turns out when Roslyn ships a new compiler it invalidates all deterministic assemblies compiled with the previous compiler that embed the pdb, because the pdb contains the SHA of the compiler:
January 20, 2025 at 7:30 AM
Turns out when Roslyn ships a new compiler it invalidates all deterministic assemblies compiled with the previous compiler that embed the pdb, because the pdb contains the SHA of the compiler:
I just needed a cross product for the first time ever so I wrote a Linq-like one:
January 12, 2025 at 5:24 AM
I just needed a cross product for the first time ever so I wrote a Linq-like one: