ildasmの出力をjsonやxmlのようにすると、やや簡単にプログラムで読むことができます。ildasmの出力をプログラムで読み込む最良の方法
出力を1行ずつ読み込み、クラスやメソッドなどをリストに追加してから、それを変更してXMLとして書き直して読んだりする方法でした。
質問:よりスマートで簡単な出力方法はありますか?
ildasmの出力をjsonやxmlのようにすると、やや簡単にプログラムで読むことができます。ildasmの出力をプログラムで読み込む最良の方法
出力を1行ずつ読み込み、クラスやメソッドなどをリストに追加してから、それを変更して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に格納することができます。
問題が発生した場合は、私たちにpingしてください。
*出力*の例と、それに何をしたいかを示します。現在私は[this](http://stackoverflow.com/q/6792828/1997232)と[this](http://stackoverflow.com/q/284324/1997232)の間で選択することはできません* vs *不明瞭*)。 – Sinatr
なぜildasm経由ですか?バイナリを直接読みやすくなりました。セシルは助けるかもしれない図書館です。 https://github.com/jbevain/cecil/wiki – adrianm
'ildasm'の出力は、' ilasm'以外のプログラムによって読み込まれることを意図していません。そういうわけで、狂気がある。 –