Как получить текущий путь к каталогу проекта с помощью С#

ладно, вот вопрос. У меня два проекта: один С# Console, а другой - библиотека классов. Я получаю доступ к/вызову метод библиотеки классов из консольного приложения. В проекте библиотеки классов есть папка "Файлы".

Мне нужно получить путь к папке с файлами библиотеки классов, но всякий раз, когда я использую

System.IO.Directory.GetCurrentDirectory();

и

Environment.CurrentDirectory; 

он дает мне путь к проекту Console, который я использую для вызова метода.

Вышеуказанные методы дают мне путь, как

C:\\ConsolePro\\bin\\Debug

но мне нужен путь проекта библиотеки классов

C:\\ClassLibPro\\bin\\Debug

Просьба сообщить

Ответ 1

Я считаю, что проблема такова:

Поскольку проект Console имеет ссылку на файл DLL, он использует DLL для вызова любых методов. В это время он возвращает DLL-каталог projct библиотеки классов, которая находится в каталоге bin проекта проекта, и не знает о физическом расположении проекта библиотеки классов.

так что по существу он возвращает тот же путь к проекту. Мне нужно будет перенести оба проекта в один и тот же каталог, чтобы решить эту проблему.

Ответ 2

После компиляции и запуска кода "Путь к проекту" не имеет смысла. Все, что вы можете определить, - это расположение файлов скомпилированных сборок. И вы можете делать только то, что вы спрашиваете, если ваш проект консоли ссылается на встроенную библиотеку DLL класса, а не через ссылку на проект.

Затем вы можете использовать Reflection для получения путей сборки, например;

string path = Assembly.GetAssembly(typeof (SomeClassInOtherProject)).Location;

Ответ 3

Если вы загружаете библиотеку классов из другой сборки.

string Path = System.Reflection.Assembly.GetAssembly(typeof({LibraryClassName})).Location;

string PathToClassLibPro = Path.GetDirectoryName( Path);

Замените {LibraryClassName} именем класса вашей библиотеки.

Ответ 4

Надеюсь, я правильно понимаю u:

Path.GetDirectoryName(typeof(Foo.MyFooClass).Assembly.Location);

Ответ 5

Вы можете использовать Directory.GetParent(Directory.GetCurrentDirectory()) несколько раз, чтобы получить каталоги более высокого уровня, а затем добавить путь к каталогу lib до конца.

Ответ 6

Я бы порекомендовал один из двух вариантов.

  • Если файлы являются небольшими, включите их в библиотеку классов и по возможности переместите их в временное место

  • Другой вариант - скопировать файлы во время сборки в выходной каталог и использовать их таким образом. В случае нескольких общих проектов лучше всего иметь общую папку bin, в которую вы копируете сборки и запускаете их из этого места.

Ответ 7

Несмотря на то, что я не могу найти хорошее решение, я использую этот трюк: пока вы хотите вернуться к своему идеальному пути, вы должны добавить Directory.GetParent() вместо ...

  Directory.GetParent(...(Directory.GetParent(Directory.GetCurrentDirectory()).ToString()...).ToString()