获取参考位置的符号



我正在使用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对应的符号?如何?

因此,在这些位置中没有严格的"符号",至少没有与生俱来的概念。您可以做的是获取该位置,并找到封闭符号。您可以获取该位置的SyntaxTree并获得Document。从那里,呼叫GetSemanticModelAsync,然后呼叫ISemanticModel.GetEnclosingSymbol

例如,下面是一些为 FAR 本身执行此操作的(内部)代码:https://github.com/dotnet/roslyn/blob/748d6ab1b504ceee0c29f132fdcbe2a777aa88ea/src/Workspaces/Core/Portable/FindSymbols/ReferenceLocationExtensions.cs#L67-L101

最新更新