Roslyn / Найти ссылки - Не удается правильно загрузить рабочее пространство

Я пытаюсь написать некоторый код, чтобы найти все вызовы методов любого данного метода, так как я ищу создать инструмент для создания диаграмм последовательности UML с открытым исходным кодом. У меня, однако, проблемы с прохождением первых нескольких строк кода: /

API, похоже, сильно изменился, и я не могу определить правильное использование, глядя на код.

Когда я делаю:

    var workspace = new CustomWorkspace();
    string solutionPath = @"C:\Workspace\RoslynTest\RoslynTest.sln";
    var solution = workspace.CurrentSolution;

Я считаю, что рабочее пространство. В CurrentSolution есть 0 проектов. Я подумал, что это будет эквивалентно тому, что было ранееWorkspace.LoadSolution( string solutionFile ) который тогда предположительно содержал бы какие-либо проекты в решении, но я не нахожу никакого успеха на этом пути.

Я ужасно запутался 0.о

Если бы кто-то мог предложить какое-то дополнительное руководство относительно того, как я могу использовать API FindReferences для идентификации всех вызовов определенного метода, это было бы очень признательно!

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

================================================== ==================

Редактировать -

Вот полный пример, основанный на принятом ответе:

using System.Linq;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.MSBuild;
using Microsoft.CodeAnalysis.FindSymbols;
using System.Diagnostics;

namespace RoslynTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string solutionPath = @"C:\Workspace\RoslynTest\RoslynTest.sln";
            var workspace = MSBuildWorkspace.Create();
            var solution = workspace.OpenSolutionAsync(solutionPath).Result;
            var project = solution.Projects.Where(p => p.Name == "RoslynTest").First();
            var compilation = project.GetCompilationAsync().Result;
            var programClass = compilation.GetTypeByMetadataName("RoslynTest.Program");

            var barMethod = programClass.GetMembers("Bar").First();
            var fooMethod = programClass.GetMembers("Foo").First();

            var barResult = SymbolFinder.FindReferencesAsync(barMethod, solution).Result.ToList();
            var fooResult = SymbolFinder.FindReferencesAsync(fooMethod, solution).Result.ToList();

            Debug.Assert(barResult.First().Locations.Count() == 1);
            Debug.Assert(fooResult.First().Locations.Count() == 0);
        }

        public bool Foo()
        {
            return "Bar" == Bar();
        }

        public string Bar()
        {
            return "Bar";
        }
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос