What is the difference between Server.MapPath and HostingEnvironment.MapPath?

asp.net, c#

Solution

`Server.MapPath()` eventually calls `HostingEnvironment.MapPath()`, but it creates a `VirtualPath` object with specific options:

The `VirtualPath` object passed to `HostingEnvironment.MapPath()` is constructed like this:

VirtualPath.Create(path, VirtualPathOptions.AllowAllPath|VirtualPathOptions.AllowNull);

Edit: in reality, the only difference is that you are allowed to pass null to `Server.MapPath()`, but not to `HostingEnvironment.MapPath()`

Problem

Is there any difference between `Server.MapPath()` and `HostingEnvironment.MapPath()`? Does `Server.MapPath()` have any advantages over `HostingEnvironment.MapPath()`? My original problem was mapping the file path on a server when the `HttpContext` is not present and I cannot pass a `Server` variable from `Global.asax` to my method. I used `HostingEnvironment.MapPath()` instead since it doesn't need `HttpContext`. Are there any situations when these two methods will give different results?

Original source

Related problems