You can uninstall Microsoft .net framework using Add/Remove. Then download and install the latest version from here: http://msdn.microsoft.com/en-us/netframework/aa569263.aspx
There are several versions of the .NET framework and they are all independent- that is, they are not cumulative.
there is .NET 1.0, .NET 1.1, .NET 2.0, .NET 3.0, .NET 3.5, and .NET 4.0. These correspond to various released of Visual Studio starting with the initial release of Visual Studio .NET (Visual Studio 7) through to the most recent version, 2010.
In order to run a program compiled with Visual Studio 7, you need the .NET Framework 1.0 installed. (I think they might run with 1.10) but having version 2.0, 3.5, 4.0, etc installed doesn't let it run- you must have 1.0 or 1.1 installed.
The same applies for applications compiled to run on the other frameworks. You pretty much need the same version installed on your machine.
Windows XP came with 1.0 installed (or, at least, it came with the installer for 1.0 on the CD). Windows Vista has 2.0 pre-installed, and Windows Server 2008 comes with either 3.0 or 3.5 depending on the release date.
Of course you can install even the latest version into Windows XP. Some versions can even be installed in Windows 9x.
The way I've always tended to think of it is similar to how Java is. a Java program is compiled into an otherwise useless class file that contains what is called "java bytecode" this java bytecode is interpreted by the java runtime which emulates a virtual "java" CPU. This allows the actions of the program to be monitored every step of the way and appropriate blocks and exceptions to occur when it tries to do anything it shouldn't. With Java, when you install the Java runtime, it installs two things: the runtime "program" and plugins themselves, as well as the Java Class library, which provides the base set of functionality for all java programs.
Equally, .NET programs are compiled to something called IL (Intermediate Language). The idea is to allow the programs to be optimized based on what CPU it is running on- so if you run Program X on a Super speedy hyperthreaded machine, the CLR (the Common Language Runtime) can compile the program to optimized machine code Specifically for that processor. The same goes for nearly any other processor- the best optimizations are performed based on the current environment. The .NET Framework installs the CLR (the actual virtual machine) as well as the .NET framework classes themselves, which provide the base functionality for .NET programs.
returning to the problem at hand, "NGEN" is the "native image generator". Therefore, my guess is that the background process detects whenever a .NET program runs and compiles it from IL to native machine code on the spot and then places it in the global assembly cache. If this is the case, it is absolutely safe to remove it from your startup list, as the function it performs is purely optional.