2016-05-31 57 views

回答

0

您應該爲所有項目文件創建所有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" 
} 
+0

感謝您的支持!有沒有關於符號的很好的教程/指南?羅斯林教程在幫助我理解符號及其用法方面沒有太多幫助。 –

+0

如果我調用具有多個標識符的函數調用,例如'test.ToString()。ToUpper()。Contains(「asd」)',Roslyn的Symbol API /語義建模如何幫助我分析這個? –

相關問題