2010-08-28 43 views
5

我有幾個DLL文件,我想導出所有公共類與名稱空間分隔的方法(導出到HTML /文本文件或其他任何我可以CTRL + C/V在Windows :))。C#API生成器

我不想創建文檔或使用xml文件合併我的dll。我只需要一個所有公共方法和屬性的列表。

什麼是最好的方式來實現這一目標?

TIA任何答案

+2

出口去哪裏? – 2010-08-28 19:55:37

+0

純文本文件或任何我可以複製粘貼:> – Jarek 2010-08-28 19:58:42

回答

6

周圍的邊緣很粗糙,但嘗試一下本作的大小:

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

注:這需要細化,以排除屬性的getter/setter和繼承的方法,但它是一個不錯的起點

+0

如果我正確解釋OP,需要在LINQ查詢中對每個名稱空間的這些類進行分組,並輸出每個名稱空間名稱。 – PHeiberg 2010-08-29 17:30:38

+0

@PHeiberg,我沒有說這是完美的! ;-)也就是說,我可以調整它與OP之後的更接近的匹配。公平點做得好=) – Rob 2010-08-29 19:06:42

1

你吃過從展鵬軟件看看.NET Reflector這裏開始。它具有導出功能。

+0

它只是導出所有文件並創建VS項目。我並不需要那個。 – Jarek 2010-08-28 20:05:37