Як отримати Bin Path?


80

Мені потрібен шлях до кошика виконуючої збірки. Як ти це отримуєш? У мене є папка Plugins у Bin / Debug, і мені потрібно отримати розташування


Навіщо вам це? Чому у програми вже немає шляху, здавалося б, зібрання було цілком нормальним? Як виглядає ваше розгортання?
McKay

Відповіді:


119

Ось як ви отримуєте шлях до виконання програми:

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

MSDN має повне посилання на те, як визначити шлях до програми, що виконується .

Зверніть увагу, що значення in pathбуде у формі file:\c:\path\to\bin\folder, тому перед використанням шляху вам може знадобитися file:\зняти фронт. Наприклад:

path = path.Substring(6);

1
Привіт, дякую за оперативну відповідь. Чому це так, якщо я жорстко кодую шлях, який він знаходить, і якщо я роблю такий код, він цього не робить. Єдину різницю, яку я бачу, це "\\". Мені чогось не вистачає? 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: \\" на початку. Я просто видалив його зі рядка, і все запрацювало.
Heitor Corrêa

Здається, це переходить у вихідний каталог
Demodave

1
шлях = System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly (). CodeBase); це спрацювало для мене
m1m1k

6
Я пропоную використовувати .Replace ("файл: \\", ""), щоб видалити префікс файлу, оскільки він більш конкретний для проблеми.
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 ?? "");

2
Це чудово працювало в хостингу IIS та Winform, дякую.
dynamiclynk

Дякую! Здається, це працює для програми ASP.NET та консольної програми. В asp.net RelativeSearchPathміститься фактична папка "bin", а в консольній програмі це nullі BaseDirectoryмістить фактичний шлях "bin".
Mariusz Pawelski


8
Path.GetDirectoryName(Application.ExecutablePath)

напр. значення:

C:\Projects\ConsoleApplication1\bin\Debug

8
Примітка: Це рішення призначене для Windows. Лише форми
m1m1k

3
var path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)?.Replace("file:\\", "");
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.