Why is IIS loading a different .NET runtime version than application pool is set to

.net-4.0application-poolsiis-7.5

A website in IIS is set to use an Application Pool that is set to use .NET Framework Version 4.0. This website fails to load DLLs compiled with for 4.0. Pages on this website outputting the framework version (System.Environment.Version) report 2.0 loaded.

Why is this site loading the 2.0 framework? How can it be configured to load the 4.0 framework?

The application pool has been recycled.
Other websites on this box are loading and running the 4.0 framework.

Best Answer

Per Microsoft:

"The version of the .NET Framework that an application runs on is determined as follows:

"If the version of the .NET Framework that the application was built against is present on the computer, the application runs on that version."

Was the website compiled to target .NET 2.0?

To verify the framework version and CLR version that is targeted, there is a utility, corflags.exe, that you may use. For the bin folder where the assemblies are located, run the following command:

for %i in (*.exe,*.dll) do corflags.exe %i  

It will display, among other things, the .NET Framework version that the assembly is targeting. Note that you may also use corflags.exe to modify the PE header of the assemblies to target the .NET 4.0 CLR version, but you are probably better off recompiling for .NET 4.0 in Visual Studio.

How to: Use an Application Configuration File to Target a .NET Framework Version
http://msdn.microsoft.com/en-us/library/9w519wzk.aspx

supportedRuntime Element in app.config
http://msdn.microsoft.com/en-us/library/w4atty68.aspx

https://stackoverflow.com/questions/2961600/app-config-supportedruntime

Corflags information:
https://blogs.msdn.com/b/gauravseth/archive/2006/03/07/545104.aspx
http://msdn.microsoft.com/en-us/library/ms164699%28v=vs.80%29.aspx