I have a .NET 3.5 C# console app. I need to read the App.Config. When I go to set a reference to system.Configuration.dll, I saw that even though my app was compiled as version 3.5 of the Framework, that the Add Ref dialog only showed me the 2.0 version of the dll.
So I found the dll under:
C:\Program Files\Reference Assemblies\Microsoft\Framework.NETFramework\v3.5\Profile\Client
I decided to try and set a reference directly to this 3.5 dll. After doing this, my project ended up with a 2.0 version.
What is going on? I thought that if an app was compiled against a particular version of the Framework, that all of the dlls that were part of the framework were all from the same version. It seems like I am mixing versions. I guess I am not too surprised that I can simultaneously access dlls from older versions of the framework, but if there is a newer version in the 3.5 folder, why is it not using it? or is this really the 2.0 dll placed in the 3.5 folder?

System.Configuration.dll is from v2.0 of the Framework. The file in the location you found is still the same as the .NET 2.0 file, but it’s just there as a packaged component of the 3.5 Client Profile (with the Client Profile just being a trimmed down version of full .NET).
Version 3.5 of .NET is just a set of extensions on version 2.0 as it runs on the 2.0 CLR, and, as such, implements 2.0, 3.0, and 3.5 versions of the DLLs from the .NET framework. The classes in System.Configuration.dll were introduced, and are still all from, version 2.0 of the framework, thus the DLL itself will always be 2.0.0.0
For some more detail: http://en.wikipedia.org/wiki/.NET_Framework_3.5#.NET_Framework_3.5