2010-08-28 5 views
5

J'ai quelques fichiers DLL et je veux exporter toutes les classes publiques avec des méthodes séparées par des espaces de noms (exporter en HTML/fichier texte ou toute autre chose que je peux ctrl + c/v dans Windows :)).Générateur d'API C#

Je ne souhaite pas créer de documentation ni fusionner mes DLL avec un fichier XML. J'ai juste besoin d'une liste de toutes les méthodes et propriétés publiques.

Quelle est la meilleure façon d'y parvenir?

TIA pour toutes les réponses

+2

export Jusqu'où? –

+0

Fichier texte brut ou tout ce que je peux faire copier-coller:> – Jarek

Répondre

6

très rude sur les bords, mais essayez ceci pour la taille:

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; 
     } 
    } 
} 

Note: Ce besoin de raffinement exclure apporteurs de propriété/setters et les méthodes héritées, mais il est un lieu de départ décent

+0

Vous devez regrouper ces classes par espace de noms dans la requête LINQ et afficher également chaque nom d'espace de nom si j'interprète correctement l'OP. – PHeiberg

+0

@PHeiberg, je n'ai pas dit que c'était parfait! ;-) Cela dit, j'aurais pu le peaufiner pour mieux correspondre à ce que l'OP était après. Fair point bien fait =) – Rob

1

Avez-vous eu un coup d'œil à Reflector .NET à partir du logiciel Redgate. Il a une fonction d'exportation.

+0

Il exporte juste tous les fichiers et crée le projet VS. Je n'ai pas vraiment besoin de ça. – Jarek

Questions connexes