If you understand what Microsoft is attempting to do with .NET, then you might understand why all these different versions MAY be necessary. I say may, because it depends entirely on what software you are running. With the original Visual Studio 6.0, a programmer had to distribute the various library files needed for the program to run. These sometimes became quite large, and conflicting DLL files created what was known as DLL Hell.
With .NET, Microsoft introduced a new interface that combined all these library files into a single install. That meant that a program distribution did not have to include all the various library files that might be needed; it just needed a particular version of the .NET interface installed. Unfortunately, the various .NET interfaces are not backwards compatible.
J.A. Coutts