Get application path without using httpcontext. (asp.net)
There are several options:
WebApplication -> Web root folder UnitTest -> ArgumentNullException ConsoleApplication -> ArgumentNullException
AppDomain.CurrentDomain.BaseDirectory
WebApplication -> Web root folder UnitTest -> ...\AppDir\bin\Debug ConsoleApplication -> ...\AppDir\bin\Debug
HostingEnvironment.ApplicationPhysicalPath
WebApplication -> Web root folder UnitTest -> null ConsoleApplication -> null
I would recommend to use AppDomain.CurrentDomain.BaseDirectory, because it can be used in any type of project and it can be set up.
You can for example set UnitTest BaseDirectory to point your web root folder the AppDomain.CurrentDomain.BaseDirectory by command:
AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");
I have run across this question when looking for way to compute an URL (permalinks in the Web application) to provide in some e-mail notifications.
These were generated on another thread, so HttpContext
was not available and I wanted to avoid putting URL related information in the queue table used to generate the e-mails.
The code:
public static String GetCurrentAppDomainBasePath(String prefix = "http://"){ return String.Format("{0}{1}{2}", prefix, System.Net.Dns.GetHostEntry("").HostName, System.Web.HttpRuntime.AppDomainAppVirtualPath );}
The function returns the full virtual path like: http://full-host-name/AppName
. Of course, there are some limitations: hardcoded protocol (http
, https etc.) and using hostname
instead of domain name
(fails if multiple domains are defined on a single machine).