Roslyn FindReferencesAsync返回相同类型的不同值

时间:2017-11-23 22:07:10

标签: c# roslyn roslyn-code-analysis microsoft.codeanalysis

我有一个测试解决方案,其代码如下:

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 个答案:

没有答案