Microsoft platform -> Microsoft platform... looks vendor locked to me. I'm not going to bother trying to understand much beyond that point because it's the reason the language is going nowhere.
You probably can't understand this, but when every vendor besides Microsoft uses the words "cross platform" or "portable" they mean something far more reaching than Microsoft's definition. For example we don't consider Firefox portable because it on Ubuntu 11 and Ubuntu 12. We consider it portable because it runs on many Linux OS's, BSDs, Macs, many flavors of Windows even if some of those OSes happen to be running on ARM instead of x86. Only in the Microsoft camp is "cross platform" used to describe a program that runs on more than one revision of the same OS.
And no, Mono doesn't really count since it can't do shit with most of that "platform independent" object code generated by Microsoft compilers. The compile once use everywhere dream often doesn't work even for the mighty Java. How can we expect a technology from a vendor bent on locking software to its OS to do any better?
Yeah I might not know much about your wonderful CLR but I know what matters: it limits you to OSes made by Microsoft which makes it not portable by most standards.