如何做到?
我不想使用这个方法:
HttpContext.Current.Server.MapPath
是否有类似的函数可以在不需要httpcontext的情况下调用?
例如,如果我启动一个线程来执行一些任务,我无法使用httpcontext,但仍然需要获取应用程序的路径。而且,我不能将上下文作为参数传递或从共享变量中读取它。
如何做到?
我不想使用这个方法:
HttpContext.Current.Server.MapPath
是否有类似的函数可以在不需要httpcontext的情况下调用?
例如,如果我启动一个线程来执行一些任务,我无法使用httpcontext,但仍然需要获取应用程序的路径。而且,我不能将上下文作为参数传递或从共享变量中读取它。
有几个选项:
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
我建议使用AppDomain.CurrentDomain.BaseDirectory,因为它可以用于任何类型的项目,并且可以设置。
例如,您可以通过以下命令将UnitTest BaseDirectory设置为指向您的Web根文件夹的AppDomain.CurrentDomain.BaseDirectory:
AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");
HttpContext
可用,我想避免将与URL相关的信息放入用于生成电子邮件的队列表中。以下是代码:public static String GetCurrentAppDomainBasePath(String prefix = "http://")
{
return String.Format("{0}{1}{2}",
prefix,
System.Net.Dns.GetHostEntry("").HostName,
System.Web.HttpRuntime.AppDomainAppVirtualPath
);
}
http://full-host-name/AppName
。当然,也存在一些限制:协议是硬编码的(http
,https等),而且使用的是hostname
而不是domain name
(如果在单台计算机上定义了多个域,则会失败)。