Как получить Bin Path?

80

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

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

Ответы:

119

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

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

В MSDN есть полная справка о том, как определить путь к исполняющему приложению .

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

path = path.Substring(6);
kemiller2002
источник
1
Привет, спасибо за быстрый ответ. Почему, если я жестко закодирую путь, который он найдет, а если я сделаю следующий код, он этого не сделает. Единственная разница, которую я вижу, - это "\\". Я что-то упускаю? var binpath = Path.GetDirectoryName (Assembly.GetExecutingAssembly (). GetName (). CodeBase); var fullpath = Path.Combine (binpath, имя папки); если (! Directory.Exists (полный путь)) return;
user9969
6
В моем случае проблема заключалась в том, что System.IO.Path.GetDirectoryName () возвращает путь с "file: \\" в начале. Я просто удалил его из строки и все заработало.
Heitor Corrêa
Кажется, это идет в каталог out
Demodave
1
путь = System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly (). CodeBase); это сработало для меня
m1m1k
6
Я предлагаю использовать .Replace ("file: \\", "") для удаления префикса файла, поскольку он более специфичен для проблемы.
TinyRacoon
71

Ты мог бы сделать это

    Assembly asm = Assembly.GetExecutingAssembly();
    string path = System.IO.Path.GetDirectoryName(asm.Location);
этоизаробот
источник
10
Или это! System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
GONeale
9
Кажется, не работает, если вы запускаете тест NUnit. Путь в этом случае указывает на каталог TEMP.
tponthieux
Разве вам не нужна начальная сборка?
N-ate
29

Вот что я делал для этого:

System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, System.AppDomain.CurrentDomain.RelativeSearchPath ?? "");
Thorgeir
источник
2
Это отлично сработало в хостинге IIS и Winform, спасибо.
dynamiclynk
Благодаря! Кажется, это работает для приложения ASP.NET и консольного приложения. В asp.net RelativeSearchPathсодержит фактическую «БИН» папку и в консольном приложении это nullи BaseDirectoryсодержит фактический «БИН» путь.
Мариуш Павельски
8
var assemblyPath = Assembly.GetExecutingAssembly().CodeBase;
Джеймс Карран
источник
8
Path.GetDirectoryName(Application.ExecutablePath)

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

C:\Projects\ConsoleApplication1\bin\Debug
Войтек Турович
источник
8
Примечание: это решение только для Windows.Forms
m1m1k
3
var path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)?.Replace("file:\\", "");
StealthKK
источник