0
我試圖使ildasm輸出更像json或xml,以便它可以通過編程方式輕鬆讀取它。什麼是編程讀取ildasm輸出的最佳方式
我意欲通過讀取線的輸出線,然後添加的類和方法等,以列表來做到這一點,然後修改和重寫爲XML,然後讀取其的方法。
問:是否有更聰明或更簡單的方法來讀取輸出?
我試圖使ildasm輸出更像json或xml,以便它可以通過編程方式輕鬆讀取它。什麼是編程讀取ildasm輸出的最佳方式
我意欲通過讀取線的輸出線,然後添加的類和方法等,以列表來做到這一點,然後修改和重寫爲XML,然後讀取其的方法。
問:是否有更聰明或更簡單的方法來讀取輸出?
有一種方法通過讀取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格式存儲,如上所述。
如果您遇到任何問題,請給我們打電話。
給出*輸出*的例子以及你想要用它做什麼。目前我無法在[this](http://stackoverflow.com/q/6792828/1997232)和[this](http://stackoverflow.com/q/284324/1997232)之間選擇重複(或只是* broad * vs *不清楚*)。 – Sinatr
爲什麼要通過ildasm?似乎更容易直接讀取二進制文件。塞西爾是一個圖書館,可能會有所幫助。 https://github.com/jbevain/cecil/wiki – adrianm
'ildasm'輸出不應該被'ilasm'之外的任何程序讀取。那種方式就是瘋狂。 –