2016-10-26 108 views
0

我試圖使ildasm輸出更像json或xml,以便它可以通過編程方式輕鬆讀取它。什麼是編程讀取ildasm輸出的最佳方式

我意欲通過讀取線的輸出線,然後添加的類和方法等,以列表來做到這一點,然後修改和重寫爲XML,然後讀取其的方法。

問:是否有更聰明或更簡單的方法來讀取輸出?

+0

給出*輸出*的例子以及你想要用它做什麼。目前我無法在[this](http://stackoverflow.com/q/6792828/1997232)和[this](http://stackoverflow.com/q/284324/1997232)之間選擇重複(或只是* broad * vs *不清楚*)。 – Sinatr

+2

爲什麼要通過ildasm?似乎更容易直接讀取二進制文件。塞西爾是一個圖書館,可能會有所幫助。 https://github.com/jbevain/cecil/wiki – adrianm

+0

'ildasm'輸出不應該被'ilasm'之外的任何程序讀取。那種方式就是瘋狂。 –

回答

1

有一種方法通過讀取IL代碼得到的類和方法的列表。 我說的解決方案可能有點長,但它會起作用。

IL只是.exe或.dll。首先嚐試使用ILSpy將其轉換爲C#或VB。下載這個工具並將你的DLL打開。該工具可以將您的IL代碼轉換爲C#或VB。

轉換後,將轉換後的代碼保存到txt文件中。

然後閱讀文本文件並找到其中的類和方法。

閱讀方法名稱:通過行的文件行

迭代,並檢查線路是否有名稱「類」

MatchCollection mc = Regex.Matches(str, @"(\s)([A-Z]+[a-z]+[A-Z]*)+\("); 

要閱讀類名。如果它有名字,那麼拆分值並存儲該值/文本其自帶的名字「類」這不過是類名後。

完整代碼:

static void Main(string[] args) 
    { 
     string line; 
     List<string> classLst = new List<string>(); 
     List<string> methodLst = new List<string>(); 
     System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\******\Desktop\TreeView.txt"); 
     string str = File.ReadAllText(@"C:\Users\*******\Desktop\TreeView.txt"); 

     while ((line = file.ReadLine()) != null) 
     {  
       if (line.Contains("class")&&!line.Contains("///")) 
       { 
        // for finding class names 

        int si = line.IndexOf("class"); 
        string followstring = line.Substring(si); 
        if (!string.IsNullOrEmpty(followstring)) 
        { 
         string[] spilts = followstring.Split(' '); 

         if(spilts.Length>1) 
         { 
          classLst.Add(spilts[1].ToString()); 
         } 

        } 
       } 
     } 
     MatchCollection mc = Regex.Matches(str, @"(\s)([A-Z]+[a-z]+[A-Z]*)+\("); 

     foreach (Match m in mc) 
     { 
      methodLst.Add(m.ToString().Substring(1, m.ToString().Length - 2)); 
      //Console.WriteLine(m.ToString().Substring(1, m.ToString().Length - 2)); 
     } 

     file.Close(); 
     Console.WriteLine("******** classes ***********"); 
     foreach (var item in classLst) 
     { 
      Console.WriteLine(item); 
     } 
     Console.WriteLine("******** end of classes ***********"); 

     Console.WriteLine("******** methods ***********"); 
     foreach (var item in methodLst) 
     { 
      Console.WriteLine(item); 
     } 

     Console.WriteLine("******** end of methods ***********"); 
     Console.ReadKey(); 

    } 

在這裏,我存儲在列表中的類名和方法名。您可以稍後將它們以XML或JSON格式存儲,如上所述。

如果您遇到任何問題,請給我們打電話。

相關問題