.net did not get it right - they basically said "there is 1 language, the CLR and it runs in its own little sandbox. We might add some crappy hooks to let others play with us, but they'll be terribly inefficient and difficult to use".
Its the same with Java - the environment is almost deliberately designed to be "java only".
If .net had built its tooling to run natively instead of in the managed sandbox then I think they could have done better with the interoperability. As it is, they really want you to become a .net-only shop. (even things like WCF have the crappy options for interop, so if you want to interact with a .NET WCF service, you either have to go with shitty SOAP, as the fast and efficient socket option is .NET only).
I know you meant lots of languages can be run in .NET, like VB.NET or C# or F# or IronPython, but really they are just syntactic sugar on top of the underlying bytecode. All that is different is the words used to code up your program, some have curly braces, some have BEGIN/END.. the difference is superficial.