2016-10-15 3 views
0

たとえば、ソースコードが文字列に含まれているとします。プロキシメソッドを作成するソースコードを生成するには?

string source = 
      "var watch = new System.Diagnostics.Stopwatch(); 
      var stack = new Stack<string>(); 
      var list = new List<string>() { }; 
      watch.Start();"; 
source = Emit(source); 

私はこれは、いくつかの難読化ツールに実装され、そしてプロキシメソッドか何かと呼ばれる私が覚えていればされ、それがインライン化とは正反対である。放出されたソースは

   var watch = A(); 
       var stack = B(); 
       var list = C(); 
       D(watch); 

System.Diagnostics.Stopwatch A() 
{ 
    return new System.Diagnostics.Stopwatch(); 
} 
Stack<string> B() 
{ 
    return new Stack<string>(); 
} 
List<string> C() 
{ 
    return new List<string>(); 
} 
void D(System.Diagnostics.Stopwatch a) 
{ 
    a.Start(); 
} 

ような何かになりたいですこれを実装する正しい方法は何でしょうか?表現木? RoslynまたはSystem.Codedomまたは他のライブラリ?

+0

私はロザリンが最善の策だと言います。あなたはソースの個々の部分で簡単に作業できるように、文字列をASTに解析します(後述のように)。 – wablab

答えて

0

通常、コードは文字列ではなく、選択したコンパイラ/コード生成ライブラリのタイプのAST(抽象構文木)ビルドとして使用します。

このようなASTは、文字列ではなく整理されたデータ構造であるため、簡単に変更できます。

関連する問題