2015-01-08 2 views
1

Используя System.Reflection, легко изучить все различные типы сборки, сверлить их члены, свойства и т. Д. Что (если есть) - это сопоставимый API для этого в Roslyn?Как исследовать API как System.Reflection в Roslyn?

+0

Почему нижний предел? – ChaseMedallion

+0

Я думаю, это было бы полезно для других, если бы вы указали, что вы пробовали. – JoshVarty

ответ

1

Есть несколько полезных фрагментов Roslyn на FAQ.

На вопрос:

Как получить все символы сборки (или все упомянутые узлы)

Ниже предоставлена. Он просто печатает все пространства имен, типы, поля и методы во всех сборках, на которые ссылается ваша компиляция. Это должно послужить хорошей отправной точкой для вас.

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); 
      } 
     } 
    } 
} 
Смежные вопросы