1

プログラムで読みやすくするために、ildasm の出力を json や xml のようにしようとしています。

出力を1行ずつ読み取り、クラスやメソッドなどをリストに追加してから、変更してxmlとして書き直してから読み取ることで、私が意図した方法です。

質問:出力を読むためのよりスマートで簡単な方法はありますか?

4

1 に答える 1

2

IL コードを読み取ることで、クラスとメソッドのリストを取得する方法があります。私が言っている解決策は少し長いかもしれませんが、うまくいくでしょう。

IL は .exe または .dll に他なりません。まずILSpyを使用して、これを C# または VB に変換してみてください。このツールをダウンロードして、これに DLL を開きます。このツールは、IL コードを C# または VB に変換できます。

を変換したら、変換したコードを txt ファイルに保存します。

次に、テキスト ファイルを読み、その中のクラスとメソッドを見つけます。

メソッド名を読むには:

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

クラス名を読み取るには:

ファイルを 1 行ずつ反復処理し、その行の名前が"Class"かどうかを確認します。名前がある場合は、値を分割し、 ClassNameに他ならない「Class」という名前の後に続く値/テキストを保存します。

完全なコード:

  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 に保存できます。

問題が発生した場合は、お問い合わせください。

于 2016-10-27T08:57:33.713 に答える