我有一个测试解决方案,其中包含如下代码:
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 没有值。查看从两个实例(符号和类型)返回的属性值,它们看起来很相似。显然,我在评估树的方式上遗漏了一些东西,但我不清楚出了什么问题。
这是一个独立的代码分析项目。
任何帮助表示赞赏。
干杯