コードを動的にコンパイルおよび実行するタスクを簡素化するために、SharpByte.Dynamicというパッケージを作成しました。ここでさらに詳しく説明するように、拡張メソッドを使用して、任意のコンテキストオブジェクトでコードを呼び出すことができます。
例えば、
someObject.Evaluate<int>("6 / {{{0}}}", 3))
3を返します。
someObject.Evaluate("this.ToString()"))
コンテキストオブジェクトの文字列表現を返します。
someObject.Execute(@
"Console.WriteLine(""Hello, world!"");
Console.WriteLine(""This demonstrates running a simple script"");
");
これらのステートメントをスクリプトなどとして実行します。
実行可能ファイルは、ここの例に示すように、ファクトリメソッドを使用して簡単に取得できます。必要なのは、ソースコードと予想される名前付きパラメーターのリストだけです(トークンは、{{{0}}などの三重括弧表記を使用して埋め込まれますstring.Format()およびハンドルバーのような構文との衝突を避けるために):
IExecutable executable = ExecutableFactory.Default.GetExecutable(executableType, sourceCode, parameterNames, addedNamespaces);
各実行可能オブジェクト(スクリプトまたは式)はスレッドセーフであり、保存および再利用が可能で、スクリプト内からのロギングをサポートし、タイミング情報および発生した場合は最後の例外を保存します。また、それぞれにコンパイルされたCopy()メソッドもあります。安価なコピーを作成する。つまり、スクリプトまたは式からコンパイルされた実行可能オブジェクトをテンプレートとして使用して、他のオブジェクトを作成します。
コンパイル済みのスクリプトまたはステートメントの実行のオーバーヘッドは比較的低く、適度なハードウェアではマイクロ秒未満であり、コンパイル済みのスクリプトと式は再利用のためにキャッシュされます。