2010-08-11 13 views
51

Potrzebuję ścieżki bin zespołu wykonującego. Jak to rozumiesz? Mam Plugins folder w bin/Debug i muszę dostać lokalizacjęJak uzyskać ścieżkę bin?

+0

Dlaczego potrzebne? Dlaczego aplikacja nie ma już ścieżki, wydawało się, że montaż jest w porządku? Jak wygląda twoje wdrożenie? – McKay

Odpowiedz

73

Oto jak uzyskać ścieżkę realizacji wniosku:

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

MSDN ma pełne odniesienie na how to determine the Executing Application's Path.

Należy pamiętać, że wartość w path będzie miała postać file:\c:\path\to\bin\folder, więc przed skorzystaniem z tej ścieżki może być konieczne usunięcie z przodu file:\. Np .:

path = path.Substring(6); 
+0

Cześć, dziękuję za szybką odpowiedź. Dlaczego jest tak, że jeśli hardcodeeduję ścieżkę, która go znajduje i jeśli zrobię poniższy kod, to nie robi. Jedyna różnica jaką widzę to "\\". Czy czegoś brakuje? var binpath = Path.GetDirectoryName (Assembly.GetExecutingAssembly() .GasName(). CodeBase); var fullpath = Path.Combine (ścieżka binatu, nazwa folderu); jeśli (! Directory.Exists (fullpath)) powrócą; – user9969

+6

W moim przypadku problem polegał na tym, że System.IO.Path.GetDirectoryName() zwraca ścieżkę z "file: \\" na początku. Właśnie usunąłem go ze sznurka i wszystko działało. –

+0

To wydaje się iść na zewnątrz katalogu – Demodave

50

Można to zrobić

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

Albo to! 'System.IO.Path.GetDirectoryName (Assembly.GetExecutingAssembly(). Lokalizacja)' – GONeale

+4

Wydaje się nie działać, jeśli używasz testu NUnit. Ścieżka w tym przypadku wskazuje na katalog TEMP. – tponthieux

+10

haha, słodka nazwa zmiennej – JohnnyFun

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

np. wartość:

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

Uwaga: to rozwiązanie jest dla Windows.Forms only – m1m1k

16

To właśnie użyłem do osiągnięcia tego celu:

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

To działało idealnie w hostingach IIS i WinForce, dziękuję. – wchoward

Powiązane problemy