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

时间:2016-05-31 09:53:29

标签: c# analysis roslyn roslyn-code-analysis

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

例如,  Request.QueryString来自System.Web.UI,我怎么能检测出来?

同一个项目中的类声明如何但名称空间不同? 以及来自同一项目的其他类的函数调用。

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

1 个答案:

答案 0 :(得分:1)

您应为所有项目文件的所有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"
}