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

хорошо, вот вопрос. У меня есть два проекта: консоль C# и библиотека классов. Я получаю доступ / вызываю метод библиотеки классов из консольного приложения. В проекте библиотеки классов есть папка с именем Files.

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

System.IO.Directory.GetCurrentDirectory();

и

Environment.CurrentDirectory; 

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

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

C:ConsoleProbinDebug

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

C:ClassLibProbinDebug

пожалуйста

7 ответов


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

затем, вы можете использовать отражение, чтобы получить Assembly пути;

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

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

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

string PathToClassLibPro = Path.GetDirectoryName( Path);

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


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

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

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


Я надеюсь, что понимаю U corretly:

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

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


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

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

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


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