.Net frameworks are not identical to the JVM. The general principle of the JVM is that it remains binary compatible across all versions (this limitation forced severe constraints onto the implementation of java generics, for example). In contrast there are multiple versions of the .Net runtime (CLR) that are not compatible. MS often makes breaking changes across major versions of the CLR.