Как в ASP.NET получить физический путь к файлу, если HttpContext.Current имеет значение NULL?

StackOverflow https://stackoverflow.com/questions/109280

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

Можете ли вы посмотреть пути к сборке и 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 ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top