Как вы определяете физический путь файла без HttpContext?

У меня есть некоторые процессы, которые запускаются без HttpContext в веб-приложении ASP.NET MVC. Этот процесс должен быть способен определить физический путь к каталогу содержимого приложения для чтения/записи данных. Но, поскольку он не имеет HttpContext, я не могу использовать такие причудливые вещи, как Server.MapPath и т.д. Предложения?

Ответ 1

На веб-сайте лучше использовать HttpRuntime.AppDomainAppPath, потому что в определенные моменты пути выполнения (т.е. когда сайт начинается вверх), там нет HttpContext.Current.

См. также этот пост.

Ответ 2

Лучший способ сделать это - использовать свойство AppDomain.BaseDirectory. Пока вы не возитесь с пользовательскими доменами приложений, он будет указывать на корневой каталог приложений. Другими словами; эти две строки будут одинаковыми:

string mapUsingAppDomain = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Contents");
string mapUsingServer = HttpContext.Current.Server.MapPath("~/Contents");