Поиск всех ссылок на метод с Roslyn

Я ищу сканирование группы файлов .cs, чтобы увидеть, какие из них вызывают свойство Value Nullable (поиск всех ссылок). Например, это будет соответствовать:

 class Program { static void Main() { int? nullable = 123; int value = nullable.Value; } } 

Я узнал о Roslyn и посмотрел на некоторые образцы, но многие из них устарели, и API огромный. Как мне это сделать?

Я застрял после parsingа дерева синтаксиса. Это то, что у меня есть до сих пор:

 public static void Analyze(string sourceCode) { var tree = CSharpSyntaxTree.ParseText(sourceCode); tree./* ??? What goes here? */ } 

Вероятно, вы ищете class SymbolFinder и, в FindAllReferences метод FindAllReferences .

Похоже, у вас проблемы с знакомством с Рослином. У меня есть серия сообщений в блогах, чтобы помочь людям познакомиться с Рослином по имени Learn Roslyn Now .

Поскольку @SLaks упоминает, что вам понадобится доступ к семантической модели, которую я расскажу в части 7: Введение в семантическую модель

Вот пример, который показывает, как можно использовать API. Если вы в состоянии, я бы использовал MSBuildWorkspace и загружал проект с диска, а не создавал его в AdHocWorkspace как это.

 var mscorlib = PortableExecutableReference.CreateFromAssembly(typeof(object).Assembly); var ws = new AdhocWorkspace(); //Create new solution var solId = SolutionId.CreateNewId(); var solutionInfo = SolutionInfo.Create(solId, VersionStamp.Create()); //Create new project var project = ws.AddProject("Sample", "C#"); project = project.AddMetadataReference(mscorlib); //Add project to workspace ws.TryApplyChanges(project.Solution); string text = @" class C { void M() { M(); M(); } }"; var sourceText = SourceText.From(text); //Create new document var doc = ws.AddDocument(project.Id, "NewDoc", sourceText); //Get the semantic model var model = doc.GetSemanticModelAsync().Result; //Get the syntax node for the first invocation to M() var methodInvocation = doc.GetSyntaxRootAsync().Result.DescendantNodes().OfType().First(); var methodSymbol = model.GetSymbolInfo(methodInvocation).Symbol; //Finds all references to M() var referencesToM = SymbolFinder.FindReferencesAsync(methodSymbol, doc.Project.Solution).Result; 
Interesting Posts

Динамическая динамическая динамика – JPA

Java, перемещение элементов в массиве

Класс не найден с Ant, Ivy и JUnit – ошибка в build.xml?

CSS Div растягивает 100% высоты страницы

Каков второй параметр NSLocalizedString ()?

Вставить int для enums в C #

Если я регулярно использую CCleaner, это повредит или сократит срок службы жесткого диска?

Где я могу остановить Windows 7 от спячки, оставив крышку закрытой в течение длительного времени?

iterator стирания вектора

Использование обратной косой черты для удаления символов в cmd.exe (например, команда runas)

Признать произвольную строку даты

Sudo в Windows 10 Подсистема Linux не может разрешить локальное имя компьютера

Добавить свойство к объекту JavaScript, используя переменную в качестве имени?

Преобразование полей datetime SQL-сервера для сравнения только деталей даты, с индексированным поиском

Есть ли способ удалить разделительную линию из UITableView?

Давайте будем гением компьютера.