8

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

4

5 回答 5

14

System.Web.Hosting.HostingEnvironment.MapPath是您正在寻找的。每当您使用 Server 或 HttpContext.Current 对象时,请先检查HostingEnvironment是否具有您需要的内容。

于 2008-09-22T13:53:26.293 回答
1

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

我相信在某个地方的 Joe Brinkman 有一篇关于如何构造新的 HTTPContext 以在调度程序中使用的博客文章。

于 2008-09-22T15:44:33.513 回答
0

由于这个过程对于网站来说确实是带外的,也许你可以把路径放在一个配置文件中。

可能不是最好的主意,但它是一个替代方案。

于 2008-09-20T20:33:50.590 回答
0

this.GetType().Assembly.Location 怎么说?

于 2008-09-20T20:37:19.537 回答
0

您能像这样查看 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 ...
于 2008-09-20T20:43:18.633 回答