Roslyn FindReferencesAsync возвращает разные значения для одного и того же типа

У меня есть тестовое решение с таким кодом:

public class Class1
{
    public string Foo { get; set; }
}

public class Business
{
    public void DoStuff()
    {
        var c1 = new Class1();
    }
}

Если я нахожу тип через некоторые явные средства, подобные этому:

var doc = solution.Projects.First().Documents.First(x => x.Name == "Class1.cs");
var typeDef = (await doc.GetSyntaxRootAsync())
                    .DescendantNodes()
                    .OfType<TypeDeclarationSyntax>()
                    .Single(t => t.Identifier.ValueText == "Class1");
var symbol = (ITypeSymbol) (await doc.GetSemanticModelAsync()).GetDeclaredSymbol(typeDef);
                var refs = await SymbolFinder.FindReferencesAsync(symbol, solution);

Значение refs показывает 1 ссылку в бизнес-классе

Если я сделаю это так, однако:

var compiledProjects = await Tasks.Task.WhenAll(
                solution.Projects.Select(
                    async x => await x.GetCompilationAsync()));

            var potentialMatches = compiledProjects.SelectMany(x =>
 x.GetSymbolsWithName(s => s.ToLower() == "foo", SymbolFilter.All)).ToArray();

            foreach (var prop in potentialMatches)
            {
                var type = prop.ContainingType;
                var refs = await SymbolFinder.FindReferencesAsync(type, solution);
            }

Тогда refs не имеет значений. Глядя на значения свойств, возвращаемые из двух экземпляров (символ и тип), они выглядят одинаково. Очевидно, я что-то упускаю из-за того, как оценивается дерево, но мне не ясно, что не так.

Это для автономного проекта анализа кода.

Любая помощь приветствуется.

ура

0 ответов

Другие вопросы по тегам