Как в ASP.NET получить физический путь к файлу, если HttpContext.Current имеет значение NULL?
-
01-07-2019 - |
Вопрос
Я работаю с планировщиком 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 ...