Я работаю с планировщиком DotNetNuke для планирования задач, и я ищу, чтобы получить физический путь к файлу созданного мной шаблона электронной почты. Проблема в том, что HttpContext имеет значение NULL, потому что запланированная задача находится в другом потоке, и нет HTTP-запроса. Как вы можете получить физический путь файла?В ASP.NET, как вы получаете физический путь к файлу, когда HttpContext.Current является NULL?
ответ
System.Web.Hosting.HostingEnvironment.MapPath - это то, что вы ищете. Всякий раз, когда вы используете объекты Server или HttpContext.Current, сначала проверьте, есть ли у HostingEnvironment то, что вам нужно.
Поскольку этот процесс действительно вне диапазона по отношению к веб-сайту, возможно, вы можете просто поместить путь в файл конфигурации.
Не может быть лучшей идеей, но это альтернатива.
Что говорит об этом.GetType(). Assembly.Location?
Он возвращает c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Временные файлы ASP.NET \ mywebsite \ 50f1a686 \ ab5b581d \ App_Code.xkcsxvg6.dll – John
Вы можете посмотреть на Актовом & на 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 ...
Существует много способов сделать это, я лично обойду его, сохранив информацию о пути в качестве опции конфигурации для своих модулей, она не изящна, но работает и работает каждый раз.
Joe Brinkman Я верю, что где-то в другом месте есть блог, посвященный тому, как построить новый HTTPContext для использования внутри планировщика.
Для будущих читателей статьи Джо Бринкмана [здесь, для оригинальной версии] (http://www.dnnsoftware.com/community-blog/cid/135304/the-quest-for-the-dotnetnuke-holy-grail) и [здесь для обновленной версии] (http://www.dnnsoftware.com/community-blog/cid/137009/new-and-improved-holy-grail). – AaronSieb
что делать, если вы находитесь за пределами веб-проекта, но хотите скажем, попасть в папку изображений вашего веб-проекта, чтобы захватить изображение или прочитать, скажем, содержимое файла .htm, что сайты на вашем сайте, но у вас есть метод утилиты, который вы хотите вызвать снаружи, чтобы попасть в этот файл? – PositiveGuy
Если вы находитесь за пределами веб-проекта, я бы подумал, что в любом случае вам понадобится собственный код для поиска веб-проекта. Как только вы получите это, вы можете просто продолжать следовать этому пути без специального помощника, такого как «MapPath». – bdukes