在ASP.NET中,当HttpContext.Current为NULL时,如何获取physcial文件路径?

时间:2008-09-20 20:29:48

标签: .net asp.net dotnetnuke scheduler server.mappath

我正在使用DotNetNuke的调度程序来安排任务,我正在寻找我创建的电子邮件模板的物理文件路径。问题是HttpContext为NULL,因为计划任务位于不同的线程上,并且没有http请求。你将如何获得文件的物理路径?

5 个答案:

答案 0 :(得分:14)

System.Web.Hosting.HostingEnvironment.MapPath正是您要找的。每当您使用Server或HttpContext.Current对象时,请先检查HostingEnvironment是否符合您的要求。

答案 1 :(得分:1)

有很多方法可以做到这一点,我个人通过将路径信息存储为我的模块的配置选项来解决它,它并不优雅,但它每次都能正常工作。

Joe Brinkman我相信某处有关于如何构建新的HTTPContext以供在调度程序中使用的博客文章。

答案 2 :(得分:0)

由于此过程实际上与网站相关,因此您可以将路径放在配置文件中。

可能不是最好的主意,但它是另一种选择。

答案 3 :(得分:0)

说什么.GetType()。Assembly.Location?

答案 4 :(得分:0)

你能看看大会&像这样的CodeBase路径:

Imports System.Reflection
Imports System.IO
...
Path.GetDirectoryName( Assembly.GetExecutingAssembly().CodeBase ) 

这种东西并不总是有效,所以我建议做的是写一个包含大量关于程序集的数据的日志,看看这个位置有什么用。当我创建一个要在AppCenter中托管的COM组件时,我必须做些什么来获得类似的东西。我使用它来“获取”应该是什么“APP_BASE”,并设置它,所以app.config文件将正确加载。

Log.Write ( Assembly.GetExecutingAssembly().CodeBase )
Log.Write ( Assembly.GetExecutingAssembly().Location )
Log.Write ( Path.GetFullPath(".") )
Log.Write ( Application.StartupPath )
... and so on, whatever you can think of ...