2010-08-11 2 views
51

Мне нужен путь bin исполняющей сборки. Как вы его получите? У меня есть папка плагинов в Bin/Debug и мне нужно, чтобы получить местоКак получить Bin Path?

+0

Зачем вам это нужно? Почему приложение уже не имеет пути, казалось, что сборка просто прекрасна? Как выглядит ваше развертывание? – McKay

ответ

73

Вот как вы получите путь выполнения приложения:

var path = System.IO.Path.GetDirectoryName( 
     System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 

MSDN имеет полную ссылку на how to determine the Executing Application's Path.

Обратите внимание, что значение в path будет в форме file:\c:\path\to\bin\folder, поэтому перед использованием пути вам может понадобиться снять file:\ спереди. Например .:

path = path.Substring(6); 
+0

Привет, спасибо за ваш быстрый ответ. Почему это, если я hardcode путь он находит его, и если я делаю следующий код, он не делает. Единственное отличие, которое я вижу, это «\\». Я что-то упустил? var binpath = Path.GetDirectoryName (Assembly.GetExecutingAssembly(). GetName(). CodeBase); var fullpath = Path.Combine (binpath, folderName); if (! Directory.Exists (fullpath)) return; – user9969

+6

В моем случае проблема заключалась в том, что System.IO.Path.GetDirectoryName() возвращает путь с «file: \\» в начале. Я просто удалил его из строки, и все сработало. –

+0

Это, кажется, идет к директории из – Demodave

50

Вы можете сделать это

Assembly ass = Assembly.GetExecutingAssembly(); 
    string path = System.IO.Path.GetDirectoryName(ass.Location); 
+6

Или это! 'System.IO.Path.GetDirectoryName (Assembly.GetExecutingAssembly(). Location)' – GONeale

+4

Не работает, если вы используете тест NUnit. Путь в этом случае указывает на каталог TEMP. – tponthieux

+10

haha, имя сладкой переменной – JohnnyFun

6
var assemblyPath = Assembly.GetExecutingAssembly().CodeBase; 
7
Path.GetDirectoryName(Application.ExecutablePath) 

например. Значение:

C:\Projects\ConsoleApplication1\bin\Debug 
+3

Примечание: Это решение предназначено только для Windows.Forms – m1m1k

16

Это то, что я использовал для достижения этого:

System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, System.AppDomain.CurrentDomain.RelativeSearchPath ?? ""); 
+2

Это отлично работает в хостинге IIS и Winform, спасибо. – wchoward

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