获取ReferenceLocation的符号

时间:2014-04-07 22:09:58

标签: c# roslyn

我使用SymbolFinder在我的解决方案中找到对某种类型的所有引用,如下所示:

ISymbol typeOfInterest = compilation.GetTypeByMetadataName(
    "System.Reflection.PropertyInfo");
var references = SymbolFinder.FindReferencesAsync(typeOfInterest, solution).Result;
foreach (var reference in references)
{
    // reference.Locations => symbol?
}

此部分工作正常,SymbolFinder返回正确ReferenceLocations(手动检查时)。我实际上对这些位置的符号感兴趣,以获得有关引用的更多(语义)信息,因此我可以过滤/使用它(例如,只处理属性)。

关于Roslyn的公开信息似乎很少,而且我无法在SDK预览的示例中找到任何正常工作SymbolFinder的结果。所以这是我的问题:是否可以获得对应于ReferenceLocation的符号?怎么样?

1 个答案:

答案 0 :(得分:3)

所以,严格来说,并没有"符号"在任何这些地方,至少没有天生的概念。您可以做的是获取该位置,并找到封闭符号。您可以获取位置SyntaxTree并获得Document。在那里,拨打GetSemanticModelAsync,然后拨打ISemanticModel.GetEnclosingSymbol

例如,这里有一些(内部)代码为FAR本身执行此操作:http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.Workspaces/FindSymbols/ReferenceLocationExtensions.cs#45dad82331ae06ef