¿Cuál es la diferencia entre Server.MapPath y HostingEnvironment.MapPath?

¿Hay alguna diferencia entre Server.MapPath() y HostingEnvironment.MapPath() ? ¿ Server.MapPath() tiene alguna ventaja sobre HostingEnvironment.MapPath() ?

Mi problema original fue mapear la ruta del archivo en un servidor cuando el HttpContext no está presente y no puedo pasar una variable del Server de Global.asax a mi método.

HostingEnvironment.MapPath() porque no necesita HttpContext . ¿Hay alguna situación en la que estos dos métodos den resultados diferentes?

Server.MapPath() finalmente llama a HostingEnvironment.MapPath() , pero crea un objeto VirtualPath con opciones específicas:

El objeto VirtualPath pasado a HostingEnvironment.MapPath() se construye así:

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

Editar : en realidad, la única diferencia es que puede pasar nulo a Server.MapPath() , pero no a HostingEnvironment.MapPath()

Server.MapPath() requiere un HttpContext . HostingEnvironment.MapPath no lo hace.