2015-01-23 1 views
0

У меня есть фрагмент кода, который загружает некоторые сборки из текущего исполняемого каталога во время выполнения. Код является частью библиотеки, которая может быть размещена в консольном приложении/службе Windows/веб-приложении aspnet и т. Д.Как получить текущий исполняемый каталог независимо от типа хоста

Есть ли один вызов API, который будет предоставлять текущий каталог, из которого выполняется код? Для консоли службы/Windows AppDomain.CurrentDomain.BaseDirectory; возвращает правильный путь, но один и тот же вызов в приложении ASPNET возвращает путь к виртуальному корню вместо пути к [virtualroot] \ бен каталог веб-приложения.

Для ASPNET AppDomain.CurrentDomain.SetupInformation.PrivateBinPath; возвращает то, что я хочу.

Я мог бы сделать проверку, как в следующем, так что я получаю правильный путь, независимо от хоста:

string path = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath ?? 
       AppDomain.CurrentDomain.BaseDirectory; 

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

ответ

1

Чтобы проверить, где ток assebly хранится вы можете использовать это:

Assembly.GetExecutingAssembly().CodeBase 

Или, если ваш код находится в библиотеке, и вы палочка гетеродин катиона начатого exe вы можете использовать GetEntryAssembly().

CodeBase - это синтаксис URI. Чтобы получить путь (если требуется), вы можете использовать:

var path = new Uri(codeBase).AbsolutePath; 
+0

Это приведет меня в правильном направлении! Это работает: System.IO.Path.GetDirectoryName (новый Uri (Assembly.GetExecutingAssembly(). CodeBase) .AbsolutePath); –

+0

Да, конечно, я забыл, что вам нужен только каталог. – Heiner

Смежные вопросы