2016-05-31 1 views
1

Roslyn을 사용하여 메서드 호출의 정규화 된 이름을 얻으려면 어떻게해야합니까?Roslyn을 사용하여 메서드 호출/클래스 선언의 전체 경로를 얻는 방법

예를 들어, Request.QueryStringSystem.Web.UI에서 비롯됩니다. 어떻게 감지 할 수 있습니까?

동일한 프로젝트이지만 다른 네임 스페이스의 클래스 선언은 어떻습니까? 동일한 프로젝트의 다른 클래스에서의 함수 호출뿐입니다.

감사합니다. 감사합니다.

답변

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

감사합니다! 거기에 좋은 튜토리얼/가이드에 대한 기호가 있습니까? roslyn 튜토리얼은 기호와 사용법을 이해하는데 많은 도움이되었습니다. –

+0

여러 식별자가있는 함수 호출을 호출하는 방법은 어떻습니까? 'test.ToString(). ToUpper(). contains ("asd")', Roslyn의 Symbol API/Semantic Modeling은 어떻게 분석 할 수 있습니까? –

관련 문제