A little background: some of my earliest bits of programming were on VB5, then VB6, and then .NET 1.0 when that first showed up. I spent most of my early years on MS platforms, and for the most part I liked them.
I picked up a Surface RT to hack on last year, after a long absence from .NET. The state of .NET shocked me.
For one thing, the subset of .NET that's available on WinRT vs. "real" Win8 vs. WinPhone is really poorly defined. The documentation is incredibly fragmented, and it was very frustrating the even some relatively basic utility classes weren't available on some platforms. It was a struggle trying to cobble even a basic WinRT app together because of how much trial and error there is ("does this class exist? oh shit, no, okay... what's the equivalent class that's named slightly differently in a slightly different namespace...")
There's also a tremendous lack of open source. I develop iOS apps for a living nowadays, and open source is a huge part of that community. .NET has a huge lack of it - everything substantial is proprietary and commercial. Where I can Google for a bit and slap together some libs in an hour on iOS, on .NET it's downloading the trial libs of some commercial libraries, trying them out, adding the totals, and realizing that the same feature set will cost you $10K a year for these licenses. The alternative on Android/iOS is free.
A more general complaint is MS's schizophrenic support of .NET. When .NET 1.0 first came about it was touted as Microsoft's long-term direction. This was the new platform, and we can count on it being supported as a first-class citizen on all MS platforms for a long-long time. That didn't pan out exactly. Microsoft has a really bad habit of making 90-degree turns every so often that destroys any developer trust. You can't rely on anything on a MS platform because in 3 month's time they could pull the rug out from under you with little to no warning.