2010-07-17 2 views
5

Я знаю, что в том же каталоге, где мой код выполняется, находятся некоторые файлы. Мне нужно найти их и перейти к другому методу:Получить каталог, в котором находится код выполнения

MyLib.dll 
Target1.dll 
Target2.dll 

Foo(new[] { "..\\..\\Target1.dll", "..\\..\\Target2.dll" }); 

Так я называю System.IO.Directory.GetFiles(path, "*.dll"). Но теперь мне нужно узнать путь:

string path = new FileInfo((Assembly.GetExecutingAssembly().Location)).Directory.FullName) 

но есть ли более короткий путь?

+0

[Это сообщение] (http://stackoverflow.com/questions/3163495/better-way-to-get-the-base-directory) должен дать вам несколько вариантов – mhenrixon

ответ

6

Вы можете попробовать Environment.CurrentDirectory. Обратите внимание, что в зависимости от типа приложения (Console, WinForms, ASP.NET, Windows Service, ...) и способа его запуска это может вести себя по-разному.

+0

Я запускаю тест NUnit. В реальном мире я называю «Foo (Server.MapPath (« ~/bin »)), но в тесте я просто хочу отсканировать корневой каталог сборки, содержащей тест – abatishchev

+0

Спасибо! «Environment.CurrentDirectory» - это то, что я искал. Мой вызов возвращает что-то из Temp, но ваш - именно то, что мне нужно. – abatishchev

+1

Environment.CurrentDirectory не работает должным образом. Если ваше приложение обращается к стандартному диалоговому окну Windows File Open, и вы выбираете какой-то путь там, то следующий вызов в Environment.CurrentDirectory вернет этот последний выбранный путь в диалоговом окне открытия файла вместо пути к исполняющей программе. – 10100111001

2

Environment.CurrentDirectory возвращает текущий каталог, а не каталог, в котором находится выполненный код. Если вы используете Directory.SetCurrentDirectory, или если вы запустите программу, используя ярлык, где установлен каталог, это не будет тот каталог, который вы ищете.

Придерживайтесь оригинального решения. Скрыть реализацию (и сделать его короче), используя свойство:

private DirectoryInfo ExecutingFolder 
{ 
    get 
    { 
     return new DirectoryInfo (
      System.IO.Path.GetDirectoryName (
       System.Reflection.Assembly.GetExecutingAssembly().Location)); 
    } 
} 

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

  • Нет связанных вопросов^_^