A própria idéia do .Net é que você pode usar qualquer idioma com o qual já se sinta confortável e usar a plataforma DotNet sem precisar aprender um novo idioma novamente. Uma maneira de encará-lo é como uma inversão da pirâmide Java. Java pode ser explicado como "único idioma - único executável (IL) - muitos SO". dot net é "muitos idiomas - um executável - um SO" (é claro que o bit de um SO está incorreto, pois temos o Mono, mas acho que não era isso que a Microsoft tinha em mente :-P).
Sim, o C # deveria ser o idioma para o DotNet, mas não "o único". A Microsoft provavelmente esperava que os programadores de C ++ migrassem para C # a longo prazo, se não imediatamente. Mas isso não parece estar acontecendo. C ++ ainda é a terceira linguagem mais popular. A familiaridade com uma linguagem e o esforço necessário para portar uma aplicação de C ++ para C # deixou a maioria dos desenvolvedores relutantes. Afinal, por que consertar algo que não está quebrado? É por isso que a Microsoft criou C ++ / CLI. É uma maneira maravilhosa de colocar os programadores de C ++ no vagão DotNet sem precisar aprender um novo idioma. Levei muito pouco tempo para me acostumar com C ++ / CLI. A única desvantagem que vi foi a nova notação de ponteiro para classes gerenciadas pode confundir aqueles que têm um entendimento fraco dos ponteiros em C ++. Não me afetou.