.NET is Microsoft's architecture designed to compete with Java. It allows several different languages to use the same class libraries and compile to the same intermediate language.
.NET puts IL (intermediate Language) code into the .EXE file instead of machine code, this IL code is compiled at runtime (JIT=Just In Time) by the CLR (Common Language Runtime) environment.
In fact the .NET environment uses most of the Java concepts including garbage collection, single inheritance, etc. However the purpose is fundamentally different. Java is designed to provide one language which can run on any platform, whereas, .NET is designed to allow multiple languages which run on one platform (Windows). Although GNU are building a free version. Personally I prefer Java. I can see that there is merit in allowing different languages on the grounds that some languages may be better at expressing particular types of applications, or just that individual programmers may be skilled in particular languages and not want to change. However all the languages are using the same class libraries and the same object oriented principles so although different .NET languages may have different syntax, under the skin they are all become very similar and if you can do something in one language you can usually do the same in any of the other languages (If you know one .NET language you know them all). Also people have to learn new things to use the .NET languages anyway as all the languages have to be modified to fit in with this environment. Also although it may be seen as good to give people choice there are enormous benefits in having a common standard, if people were all to use the same programming language, they could easily switch between different projects and code could be shared between deferent projects more easily if there is just one source language.
So on the whole I think that it is a pity that Microsoft have implemented .NET as a way to try to undermine Java rather than something that takes forward the programming world.
Having said all that, there may be distribution and performance issues with running Java on windows that make it necessary to use .NET in some circumstances.