Как получить текущий путь к каталогу проекта с помощью С#
ладно, вот вопрос. У меня два проекта: один С# 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()