获取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