c# - 如何使用 Roslyn 获取方法调用/类声明的全名路径

标签 c# analysis roslyn roslyn-code-analysis

如何使用 Roslyn 获取方法调用的完整限定名称?

例如, Request.QueryString 来自 System.Web.UI,我如何检测到它?

同一项目中不同命名空间的类声明怎么样? 以及来自同一项目的其他类的函数调用。

感谢任何形式的帮助,谢谢!

最佳答案

您应该为所有项目文件的所有SyntaxTree 创建编译。之后,您可以使用任何节点的符号信息:

static string Code =
@"namespace TestNamespace
{
    public class Test
    {
        public int A { get; set; }
        public int B { get; set; }

        public Test(int a, int b)
        {
            A = a;
            B = b;
        }
    }
}";

static void Main(string[] args)
{
    var syntaxTree = CSharpSyntaxTree.ParseText(Code);
    var syntaxTrees = new SyntaxTree[] { syntaxTree }; // Add SyntaxTree array from project files.
    var compilation = CSharpCompilation.Create("tempAssembly", syntaxTrees);
    var semanticModel = compilation.GetSemanticModel(syntaxTree);
    var caretPosition = 46;
    var symbol = SymbolFinder.FindSymbolAtPositionAsync(semanticModel, caretPosition, new AdhocWorkspace()).Result;
    var fullName = symbol.ToString(); // fullName is "TestNamespace.Test"
}

关于c# - 如何使用 Roslyn 获取方法调用/类声明的全名路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37542434/

相关文章:

算法分析——理论方法

c# - 如何在 if 语句中正确使用 bool?

r - R 中的典型相关分析

python - 如何使用 PIL 在 python 中分析位图图像?

c# - 我可以使用 Roslyn 来完成此 C# 语法转换吗?

c# - 如何比较 POCO 类和数据库?

c# - 如何忽略秒 ToShortTimeString

c# - 为什么我不能将表单数据直接绑定(bind)到操作方法参数?

c# - 开源库是否应该进行数字签名

c# - Roslyn:检索父级或祖先 SyntaxNode 中的符号