AkashSuman Ответов: 4

Как получить список всех функций-членов в файле cs


У меня есть путь к файлу cs.

Что я уже пробовал:

Я использовал основные строковые операции, чтобы получить функции после сканирования всего файла. Я ищу хороший метод.

Tomas Takac

А вы пробовали регулярное выражение[^]?

4 Ответов

Рейтинг:
6

AkashSuman

Я использовал Roslyn, и он дает все имена методов.

public static List<string> GetAllMethodNames(string strFileName)
       {
           var tree = SyntaxTree.ParseFile(strFileName);
           var members = tree.GetRoot().DescendantNodes().OfType<MemberDeclarationSyntax>();
           List<string> methodNames = new List<string>();
           foreach (var member in members)
           {
               var method = member as MethodDeclarationSyntax;
               if (method != null)
                   methodNames.Add(method.Identifier.ToString());
           }
           return methodNames;

       }


Рейтинг:
1

Pete O'Hanlon

Если бы я делал это, я бы использовал SDK Visual Studio, который позволяет создавать расширения и инструменты, работающие внутри Visual Studio. Этот SDK предоставляет возможность анализировать классы непосредственно внутри самой Visual Studio.


Рейтинг:
0

OriginalGriff

Нет "хорошего метода", если вы не можете использовать отражение - вам нужно вручную разобрать весь файл и точно установить, что это за содержимое. Это означает идентификацию пространств имен (поскольку файл может законно содержать несколько пространств имен), классов (поскольку класс с одинаковым именем может существовать в нескольких пространствах имен, а классы могут быть встроены в другие классы), комментариев (поскольку C# включает в себя формы /* и // comment и допустимо комментировать целые классы с помощью /* ... * / block), # if blocks, #else blocks и т. д.

Серьезно? Использовать отражение.


AkashSuman

Я могу использовать отражение, но проблема в том, что у меня есть только путь к файлу. Как я буду использовать путь в размышлении ?

OriginalGriff

Использование CSC.EXE чтобы скомпилировать его, а затем использовать отражение для загрузки сборки.
Если вы этого не сделаете, вам в основном придется написать свой собственный компилятор C# первого / второго этапа, чтобы адекватно проанализировать файл.

Рейтинг:
0

Richard Deeming

Я был бы склонен использовать для этого Рослин:
GitHub-dotnet/roslyn: платформа компиляторов .NET ("Roslyn") предоставляет компиляторы C# и Visual Basic с открытым исходным кодом с богатыми API анализа кода.[^]
Начало работы с Рослин-Часть 1[^]

Это тот же компилятор, что и VS2015/2017, поэтому он должен обрабатывать все, что вы можете бросить в него.