获取ReferenceLocation的符号

我正在使用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结果的SymbolFinder 。 所以这是我的问题:是否有可能获得对应于ReferenceLocation的符号? 怎么样?

因此,在任何这些位置都没有严格的“符号”,至少没有固有的概念。 您可以做的是获取该位置,并找到封闭符号。 您可以获取位置的SyntaxTree并获取Document 。 从那里,调用GetSemanticModelAsync ,然后调用ISemanticModel.GetEnclosingSymbol

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