获取 ReferenceLocation 的符号

and*_*dyp 5 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?
}
Run Code Online (Sandbox Code Playgroud)

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

人们似乎对罗斯林很少公开信息却和我找不到任何工作与结果SymbolFinder的SDK预览的样本英寸 所以这是我的问题:是否有可能获得对应于 a 的符号ReferenceLocation?如何?

Jas*_*ski 5

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

例如,这里有一些(内部)代码为 FAR 本身执行此操作:https : //github.com/dotnet/roslyn/blob/748d6ab1b504ceee0c29f132fdcbe2a777aa88ea/src/Workspaces/Core/Portable/FindSymbols/ReferenceLocations#L6L67s。