【发布时间】:2010-09-11 16:15:36
【问题描述】:
我正在使用 DotNetNuke 的调度程序来安排任务,并且我正在寻找我创建的电子邮件模板的物理文件路径。问题是 HttpContext 为 NULL,因为计划任务在不同的线程上并且没有 http 请求。您将如何获取文件的物理路径?
【问题讨论】:
标签: .net asp.net dotnetnuke scheduler server.mappath
我正在使用 DotNetNuke 的调度程序来安排任务,并且我正在寻找我创建的电子邮件模板的物理文件路径。问题是 HttpContext 为 NULL,因为计划任务在不同的线程上并且没有 http 请求。您将如何获取文件的物理路径?
【问题讨论】:
标签: .net asp.net dotnetnuke scheduler server.mappath
System.Web.Hosting.HostingEnvironment.MapPath 是您正在寻找的。每当您使用 Server 或 HttpContext.Current 对象时,请先检查HostingEnvironment 是否有您需要的内容。
【讨论】:
MapPath 这样的特殊帮助。
有很多方法可以做到这一点,我个人通过将路径信息存储为我的模块的配置选项来解决它,它并不优雅,但它每次都有效且有效。
Joe Brinkman 我相信在某个地方有一篇关于如何构造新的 HTTPContext 以在调度程序中使用的博客文章。
【讨论】:
您能否像这样查看 Assembly 和 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 ...
【讨论】:
this.GetType().Assembly.Location 怎么说?
【讨论】:
由于这个过程对于网站来说确实是带外的,也许你可以把路径放在一个配置文件中。
可能不是最好的主意,但它是一个替代方案。
【讨论】: