Bertrand Meyer describes how .NET is a mix of multiple syntaxes for C# (VB.NET, Managed C++), as well as a generic object model for other languages (FORTRAN, Eiffel) that other languages can target. Meyer has been a big supporter of .NET over the years, porting Eiffel to .NET. He's also one of the only language designers trying to realize the original (albeit lofty) goals for .NET.
Meyer does address the issue of C#/VB.NET/Managed C++ being essentially the same language with different syntax. While Microsoft takes the low road, Meyer is taking the high road and tries to get Eiffel-as-we-know-it to play nicely with .NET. All the benefit of both worlds, with all the pain placed squarely upon the compiler writer. :-)
Meyer proves one point: .NET is simply an updated set of linking conventions (Thanks for the analogy, Dan!). It's not so different than the projects that cobble together Fortran, C, C++, Objective C, Pascal, PL/1 and COBOL in the same project. The CPU doesn't really care how the assembly language was generated, and in the end, it's all just bits anyway (so long as the inter-language calling conventions are properly handled). This is an oversimplification, because "interlanguage calling conventions" in .NET are quite grandiose: cross-language inheritance, throwing exceptions across multiple languages and catching them natively, declaring a variable in one language that's defined and implemented in another, and so on.