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 не имеет значений. Глядя на значения свойств, возвращаемые из двух экземпляров (символ и тип), они выглядят одинаково. Очевидно, я что-то упускаю из-за того, как оценивается дерево, но мне не ясно, что не так.
Это для автономного проекта анализа кода.
Любая помощь приветствуется.
ура