Как получить полный перечень файлов .cs относящихся к конкретному проекту/решению?

Пишу программку для анализа кода. Поначалу думал, что корректный способ открытия файлов .cs - получение из файла .sln списка проектов, относящихся к данному решению, а затем из каждого отдельного проекта (.csproj) - списка его .cs файлов.

Однако, анализируя .csproj-файлы разных проектов я обнаружил, что в них не всегда указан полный список файлов .cs, относящихся к конкретному проекту. Для .sln вообще не нашел специального парсера.

Подскажите, пожалуйста, как сама Visual Studio находит эти файлы?

В самом начале я планировал просто выполнять поиск файлов .cs в конкретной директории, но потом захотелось сделать по красоте и как положено. Но вот как именно положено пока не ясно.


Ответы (1 шт):

Автор решения: citn

Как знаю у VS есть несколько методов для определения таких файлов, но они все зависят от того, как настроен проект и структура решения. Основные, что я знаю:

  1. Файлы в .csproj - тут могут быть указаны не все файлы .cs, но обычно сюда закидываются те, что были добавлены вручную, но в зависимости от настроек проекта, VS может и сам туда напихать туда файлов;
  2. Автоматическое включение файлов - VS сам может включать файлы .cs, которые находятся в определенных директориях проекта. То есть, есть у тебя папка "Модели", и тогда все файлы .cs внутри этой папки могут автоматически добавляться в проект, даже если они не указаны в папке пункта 1. Но такое случается в основном, если проект настроен на использование файловой структуры;
  3. Файлы, не входящие в проект - те файлы, что не указаны в папку пункта 1 - будут не видны в проекте, даже если физически существуют;
  4. .sln файлы - вообще, вроде, файл решения не содержит информации о файлах проекта - он указывает какие проекты входят в решение и их зависимости. То есть для анализа тебе нужно будет парсить этот файл, чтобы получить список проектов, а уже после анализировать каждый .csproj; А еще для .sln файла нет официальных парсеров, но можно использовать простые текстовые операции, чтобы, собственно, достать информацию о проекте. А для .csproj можно использовать XML-парсеры.

Ну и как рекомендация - посмотри на библиотеку Roslyn - с ее помощью можно получить доступ к структуре проекта и файлам

→ Ссылка