我使用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
的符号?怎么样?
答案 0 :(得分:3)
所以,严格来说,并没有"符号"在任何这些地方,至少没有天生的概念。您可以做的是获取该位置,并找到封闭符号。您可以获取位置SyntaxTree
并获得Document
。在那里,拨打GetSemanticModelAsync
,然后拨打ISemanticModel.GetEnclosingSymbol
。
例如,这里有一些(内部)代码为FAR本身执行此操作:http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.Workspaces/FindSymbols/ReferenceLocationExtensions.cs#45dad82331ae06ef