2015-01-08 3 views
1

System.Reflection을 사용하면 어셈블리의 다양한 유형을 모두 탐색하고 구성원, 속성 등을 자세히 조사 할 수 있습니다. Roslyn에서이 작업을 수행하는 데 필적 할만한 API는 무엇입니까?Roslyn에서 System.Reflection과 같은 API를 탐색하는 방법은 무엇입니까?

+0

왜 downvote? – ChaseMedallion

+0

당신이 시도한 것을 지정했다면 다른 사람들에게 유용 할 것이라고 생각합니다. – JoshVarty

답변

1

FAQ에는 도움이되는 Roslyn 스 니펫이 있습니다. 질문에 대한

:

어떻게 어셈블리의 모든 심볼 (또는 참조 된 모든 어셈블리)

다음이 제공받을 수 있나요. 컴파일로 참조되는 모든 어셈블리에서 모든 네임 스페이스, 유형, 필드 및 메서드를 인쇄합니다. 이것은 당신을위한 좋은 출발점으로 행동해야합니다.

var compilation = ... //Get a compilation 
var results = new StringBuilder(); 

// Traverse the symbol tree to find all namespaces, types, methods and fields. 
foreach (NamespaceSymbol ns in compilation.GetReferencedAssemblySymbol(mscorlib).GlobalNamespace.GetNamespaceMembers()) 
{ 
    results.AppendLine(); 
    results.Append(ns.Kind); 
    results.Append(": "); 
    results.Append(ns.Name); 
    foreach (var type in ns.GetTypeMembers()) 
    { 
     results.AppendLine(); 
     results.Append(" "); 
     results.Append(type.TypeKind); 
     results.Append(": "); 
     results.Append(type.Name); 
     foreach (var member in type.GetMembers()) 
     { 
      results.AppendLine(); 
      results.Append("  "); 
      if (member.Kind == SymbolKind.Field || member.Kind == SymbolKind.Method) 
      { 
       results.Append(member.Kind); 
       results.Append(": "); 
       results.Append(member.Name); 
      } 
     } 
    } 
} 
관련 문제