It only works if everyone is obliged to build all their dependencies from source code, hence why Swift is having such hard time coming up with an ABI that could survive language evolution.
This works on dotnet. The dotnet runtime is versioned separately from the language so you can use a library written and compiled with C# 5 in a project that is written in C# 7 so long as they both target a compatible runtime. You can go even further and use a C# 7 library in a F# or VB project.
That is because there isn't C#, F#, VB.NET, C++/CLI or any language that you decide to put on top, just MSIL.
With straight native code, the story is a bit different.