Как получить полный перечень файлов .cs относящихся к конкретному проекту/решению?
Пишу программку для анализа кода. Поначалу думал, что корректный способ открытия файлов .cs
- получение из файла .sln
списка проектов, относящихся к данному решению, а затем из каждого отдельного проекта (.csproj
) - списка его .cs
файлов.
Однако, анализируя .csproj
-файлы разных проектов я обнаружил, что в них не всегда указан полный список файлов .cs
, относящихся к конкретному проекту. Для .sln
вообще не нашел специального парсера.
Подскажите, пожалуйста, как сама Visual Studio находит эти файлы?
В самом начале я планировал просто выполнять поиск файлов .cs
в конкретной директории, но потом захотелось сделать по красоте и как положено. Но вот как именно положено пока не ясно.
Ответы (1 шт):
Как знаю у VS есть несколько методов для определения таких файлов, но они все зависят от того, как настроен проект и структура решения. Основные, что я знаю:
- Файлы в
.csproj
- тут могут быть указаны не все файлы.cs
, но обычно сюда закидываются те, что были добавлены вручную, но в зависимости от настроек проекта, VS может и сам туда напихать туда файлов; - Автоматическое включение файлов - VS сам может включать файлы
.cs
, которые находятся в определенных директориях проекта. То есть, есть у тебя папка "Модели", и тогда все файлы.cs
внутри этой папки могут автоматически добавляться в проект, даже если они не указаны в папке пункта 1. Но такое случается в основном, если проект настроен на использование файловой структуры; - Файлы, не входящие в проект - те файлы, что не указаны в папку пункта 1 - будут не видны в проекте, даже если физически существуют;
.sln
файлы - вообще, вроде, файл решения не содержит информации о файлах проекта - он указывает какие проекты входят в решение и их зависимости. То есть для анализа тебе нужно будет парсить этот файл, чтобы получить список проектов, а уже после анализировать каждый.csproj
; А еще для.sln
файла нет официальных парсеров, но можно использовать простые текстовые операции, чтобы, собственно, достать информацию о проекте. А для.csproj
можно использовать XML-парсеры.
Ну и как рекомендация - посмотри на библиотеку Roslyn
- с ее помощью можно получить доступ к структуре проекта и файлам