2010-08-28 13 views
5

Ho alcuni file DLL e voglio esportare tutte le classi pubbliche con metodi separati da namespace (esportazione in html/file di testo o qualsiasi altra cosa posso ctrl + c/v in Windows :)).C# API generator

Non voglio creare documentazione o unire le mie DLL con il file xml. Ho solo bisogno di un elenco di tutti i metodi e le proprietà pubbliche.

Qual è il modo migliore per farlo?

TIA per eventuali risposte

+2

esportazione per dove? –

+0

File di testo normale o qualsiasi cosa che posso fare copia-incolla:> – Jarek

risposta

6

Molto ruvido intorno ai bordi, ma provate questo per il formato:

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: Questo deve raffinatezza di escludere getter proprietà/setter e metodi ereditati, ma è un punto di partenza decente

+0

È necessario raggruppare tali classi per spazio dei nomi nella query LINQ ed emettere anche ogni nome dello spazio dei nomi, se interpreto correttamente l'OP. – PHeiberg

+0

@PHeiberg, non ho detto che era perfetto! ;-) Detto questo, avrei potuto ottimizzarlo per avvicinarsi a quello che l'OP stava cercando. Fair punto ben fatto =) – Rob

1

Hai avuto uno sguardo a .NET Reflector dal software Redgate. Ha una funzione di esportazione.

+0

Esporta solo tutti i file e crea il progetto VS. Non ne ho davvero bisogno. – Jarek