Подтвердить что ты не робот

Получите путь к программе без использования httpcontext. (Asp.net)

Как это сделать?

Я не хочу использовать это:

HttpContext.Current.Server.MapPath

Есть ли аналогичная функция, которую я могу вызвать, не требуя httpcontext?

Например, если начать поток, выполняющий некоторые вещи, которые я не могу использовать httpcontext, но мне все равно нужно получить путь к приложению. И я не могу передать контекст в качестве аргумента или прочитать его из общего var.

4b9b3361

Ответ 2

Существует несколько вариантов:

HttpRuntime.AppDomainAppPath

    WebApplication     -> Web root folder
    UnitTest           -> ArgumentNullException
    ConsoleApplication -> ArgumentNullException

AppDomain.CurrentDomain.BaseDirectory

    WebApplication     -> Web root folder
    UnitTest           -> ...\AppDir\bin\Debug
    ConsoleApplication -> ...\AppDir\bin\Debug

HostingEnvironment.ApplicationPhysicalPath

    WebApplication     -> Web root folder
    UnitTest           -> null
    ConsoleApplication -> null

Я бы рекомендовал использовать AppDomain.CurrentDomain.BaseDirectory, потому что он может использоваться в любом типе проекта и его можно настроить.

Вы можете, например, установить UnitTest BaseDirectory, чтобы указать свою корневую папку вашего веб-сайта AppDomain.CurrentDomain.BaseDirectory командой:

AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");

Ответ 3

Я столкнулся с этим вопросом при поиске способа вычисления URL (постоянных ссылок в веб-приложении) для предоставления в некоторых уведомлениях по электронной почте.

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

Код:

public static String GetCurrentAppDomainBasePath(String prefix = "http://")
{
   return String.Format("{0}{1}{2}", 
      prefix,
      System.Net.Dns.GetHostEntry("").HostName, 
      System.Web.HttpRuntime.AppDomainAppVirtualPath
   );
}

Функция возвращает полный виртуальный путь: http://full-host-name/AppName. Конечно, существуют некоторые ограничения: hardcoded protocol (http, https и т.д.) И использование hostname вместо domain name (сбой, если несколько доменов определены на одной машине).