2010-08-28 15 views
5

Mam kilka plików DLL i chcę wyeksportować wszystkie klasy publiczne metodami oddzielonymi przez przestrzenie nazw (eksport do pliku html/text lub cokolwiek innego, co mogę ctrl + c/vw systemie Windows :)).Generator API C#

Nie chcę tworzyć dokumentacji ani scalać moich bibliotek dll z plikiem xml. Potrzebuję tylko listy wszystkich publicznych metod i właściwości.

Jaki jest najlepszy sposób na osiągnięcie tego?

TIA za wszelkie odpowiedzi

+2

eksport dokąd? –

+0

Zwykły plik tekstowy lub cokolwiek, co mogę zrobić, kopiuj i wklej:> – Jarek

Odpowiedz

6

Bardzo szorstkie na brzegach, ale spróbuj to dla rozmiaru:

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

Uwaga: To wymaga dopracowania, aby wykluczyć pobierające nieruchomość/ustawiaczy i dziedziczone metody, ale to przyzwoity punkt wyjścia

+0

Musisz zgrupować te klasy na przestrzeń nazw w kwerendzie LINQ i wypisać nazwę każdej przestrzeni nazw również, jeśli interpretuję OP poprawnie. – PHeiberg

+0

@PHeiberg, nie powiedziałem, że to było idealne! ;-) Powiedziałem, że mógłbym go ulepszyć, żeby lepiej pasował do tego, co było po OP. Świetny punkt dobrze wykonany =) – Rob

1

Miałeś zapoznać się z oprogramowaniem NET Reflector RedGate. Ma funkcję eksportu.

+0

Po prostu eksportuje wszystkie pliki i tworzy projekt VS. Naprawdę tego nie potrzebuję. – Jarek