And it's worth noticing that many parts of the .NET framework have gone through horrible hiccups. I mean, while the C# language is great, it feels like every framework built around a .NET seems to be implemented and then dropped without substantial improvements about 3 years later. As a developer, nothing ever seems to get fixed. They get replaced, and the replacements bring a new learning curve and a suite of new bugs and problems, and these bugs can never be fixed for backwards-compatibility reasons.
So we get a constant barrage of misstep boondoggles like Web Forms, Click Once Installers, Linq2SQL getting deprecated almost as soon as it was launched, etc. And with every step a larger pile of configuration and attributes that need to be added to get things to play nice with the OS.