2010-08-28 9 views
5

Tengo algunos archivos dll y quiero exportar todas las clases públicas con métodos separados por espacios de nombres (exportar a html/archivo de texto o cualquier cosa que pueda ctrl + c/v en Windows :)).C# API generador

No quiero crear documentación ni fusionar mis dlls con el archivo xml. Solo necesito una lista de todos los métodos y propiedades públicos.

¿Cuál es la mejor manera de lograr eso?

TIA por las respuestas

+2

exportación ¿A donde? –

+0

Archivo de texto plano o cualquier cosa que pueda copiar y pegar:> – Jarek

Respuesta

6

muy peligrosa por los bordes, pero probar esto por tamaño:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 

namespace GetMethodsFromPublicTypes 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var assemblyName = @"FullPathAndFilenameOfAssembly"; 

      var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyName); 

      AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve); 

      var methodsForType = from type in assembly.GetTypes() 
           where type.IsPublic 
           select new 
            { 
             Type = type, 
             Methods = type.GetMethods().Where(m => m.IsPublic) 
            }; 

      foreach (var type in methodsForType) 
      { 
       Console.WriteLine(type.Type.FullName); 
       foreach (var method in type.Methods) 
       { 
        Console.WriteLine(" ==> {0}", method.Name); 
       } 
      } 
     } 

     static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args) 
     { 
      var a = Assembly.ReflectionOnlyLoad(args.Name); 
      return a; 
     } 
    } 
} 

Nota: Esto necesita el refinamiento de excluir captadores de propiedades/set y métodos heredados, pero es un punto de partida decente

+0

Necesito agrupar esas clases por espacio de nombres en la consulta LINQ y también dar salida a cada nombre de espacio de nombres, si interpreto correctamente el OP. – PHeiberg

+0

@PHeiberg, ¡no dije que fuera perfecto! ;-) Dicho esto, podría haberlo ajustado para que coincida más con lo que estaba buscando el OP. Punto justo bien hecho =) – Rob

1

¿Ha tenido un vistazo a .NET Reflector de software de Redgate. Tiene una función de exportación.

+0

Exporta todos los archivos y crea el proyecto VS. Realmente no necesito eso. – Jarek