В ASP.NET, как получить физический путь к файлу, когда HttpContext.Current равен NULL? - PullRequest
8 голосов
/ 21 сентября 2008

Я работаю с планировщиком DotNetNuke, чтобы планировать задачи, и я пытаюсь получить физический путь к файлу созданного мной шаблона электронной почты. Проблема в том, что HttpContext имеет значение NULL, поскольку запланированная задача находится в другом потоке, а запрос http отсутствует. Как бы вы узнали физический путь к файлу?

Ответы [ 5 ]

14 голосов
/ 22 сентября 2008

System.Web.Hosting.HostingEnvironment.MapPath - это то, что вы ищете. Всякий раз, когда вы используете объекты Server или HttpContext.Current, сначала проверьте, есть ли HostingEnvironment , что вам нужно.

1 голос
/ 22 сентября 2008

Есть много способов сделать это, я лично обхожу это, сохраняя информацию о пути в качестве опции конфигурации для своих модулей, это не элегантно, но работает и работает каждый раз.

Джо Бринкман Я верю, что где-то поблизости есть запись в блоге о том, как создать новый HTTPContext для использования внутри планировщика.

0 голосов
/ 21 сентября 2008

что говорит это. GetType (). Assembly.Location?

0 голосов
/ 21 сентября 2008

Можете ли вы взглянуть на сборку и пути CodeBase следующим образом:

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

Такие вещи не всегда работают, поэтому я бы порекомендовал написать журнал с кучей данных о сборке, чтобы увидеть, что работает в этом месте. Это то, что мне нужно было сделать, чтобы получить нечто подобное, когда я создавал COM-компонент для размещения в AppCenter. Я использовал это, чтобы «получить» то, что должно быть «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 ...
0 голосов
/ 21 сентября 2008

Поскольку этот процесс действительно внеполосный по отношению к веб-сайту, возможно, вы можете просто указать путь в файле конфигурации.

Возможно, это не лучшая идея, но это альтернатива.

...