I don't think you can use the .NET Client Profile to build Web Applications?
Anyway, that aside. You find that namespaces tend to be re-used across different assemblies. Especially in the framework assemblies where they believe some classes conceptually belong together even if they support different technologies.
I am not sure I explained that well but take this example. There is a System namespace in mscorlib, System, System.Net, System.Core and System.Numerics. Also, System.Web may show up in System.Web.Http, or System.Web itself, and others like System.Web.Abstractions, System.Web.Optimization, etc. As a result just trying to use a using statement to discern the assembly a particular class came from can really throw you off.
The typical classes in the System.Web.Hosting namespace are in the framework assembly System.Web.dll. Microsoft has been trying to de-emphasize the direct use of System.Web.dll in favor of the more modular implementation of Katana/Kestrel.
Having said that, make sure your project directly references System.Web.dll. To use the required class either refer to it by its complete name ie System.Web.Hosting.HostingEnvironment. Or put a using System.Web.Hosting;
at the beginning of your .cs file.
It is possible to have a property in the current class that is named HostingEnvironment, or a class from another namespace in another assembly that is named HostingEnvironment. In that instance, you may need to specify the class name in full or come up with a moniker for easy reference and to reduce typing.
For instance, you could have this at the beginning of your file:
using HostEnv = System.Web.Hosting.HostingEnvironment;
Then somewhere in the body of your code, you could make reference to it thus:
var appHost = HostEnv.ApplicationHost;
Does this help?
For the particular scenario you want to address, you may then do this:
var resolvedPath = HostEnv.MapPath(pathToMap);