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

有帮助吗?

解决方案

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

其他提示

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

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

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

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

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

你能看看大会&像这样的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 ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top