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

在ASP.NET中,当HttpContext.Current为空时,如何获取物理文件路径?,.net,asp.net,dotnetnuke,scheduler,server.mappath,.net,Asp.net,Dotnetnuke,Scheduler,Server.mappath,我正在使用DotNetNuke的调度程序来安排任务,并且我希望获得我创建的电子邮件模板的物理文件路径。问题是HttpContext为NULL,因为调度的任务位于不同的线程上,并且没有http请求。您将如何获取文件的物理路径?由于此过程对于网站而言确实是带外的,因此您可以将路径放在配置文件中 可能不是最好的主意,但它是另一种选择。这个.GetType().Assembly.Location是怎么说的?您能像这样查看程序集和代码库路径吗: Imports System.Reflection Impo

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

由于此过程对于网站而言确实是带外的,因此您可以将路径放在配置文件中


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

这个.GetType().Assembly.Location是怎么说的?

您能像这样查看程序集和代码库路径吗:

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 ...

这就是你要找的。每当您使用服务器或HttpContext.Current对象时,请首先检查是否有您需要的对象。

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


乔·布林克曼(Joe Brinkman)我相信在附近的某个地方有一篇关于如何构建一个新的HTTPContext供调度器内部使用的博客文章。

它返回c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\mywebsite\50f1a686\ab5b581d\App_Code.xkcsxvg6.dlw如果您在web项目之外,但想进入您的web项目要抓取图像或阅读,比如一个.htm文件的内容,该文件位于您的网站中,但您有一个实用方法要调用外部以获取该文件?如果您在web项目外部,我认为您仍然需要自己的自定义代码来定位web项目。一旦你做到了这一点,你就可以继续沿着这条路走下去,而不需要像
MapPath
这样的特殊助手。对于未来的读者,Joe Brinkman的文章是和。