1

Mono.CSharpの最新ビルドに出くわし、それが提供する約束を気に入っています。

次のすべてを解決することができました:

namespace XAct.Spikes.Duo
{
class Program
{
    static void Main(string[] args)
    {
        CompilerSettings compilerSettings = new CompilerSettings();
        compilerSettings.LoadDefaultReferences = true;
        Report report = new Report(new Mono.CSharp.ConsoleReportPrinter());

        Mono.CSharp.Evaluator e;

        e= new Evaluator(compilerSettings, report);

        //IMPORTANT:This has to be put before you include references to any assemblies
        //our you;ll get a stream of errors:
        e.Run("using System;");
        //IMPORTANT:You have to reference the assemblies your code references...
        //...including this one:
        e.Run("using XAct.Spikes.Duo;");

        //Go crazy -- although that takes time:
        //foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
        //{
        //    e.ReferenceAssembly(assembly);
        //}
        //More appropriate in most cases:
        e.ReferenceAssembly((typeof(A).Assembly));

        //Exception due to no semicolon
        //e.Run("var a = 1+3");
        //Doesn't set anything:
        //e.Run("a = 1+3;");
        //Works:
        //e.ReferenceAssembly(typeof(A).Assembly);
        e.Run("var a = 1+3;");
        e.Run("A x = new A{Name=\"Joe\"};");

        var a  = e.Evaluate("a;");
        var x = e.Evaluate("x;");

        //Not extremely useful:
        string check = e.GetVars();

        //Note that you have to type it:
        Console.WriteLine(((A) x).Name);

        e = new Evaluator(compilerSettings, report);
        var b = e.Evaluate("a;");
    }
}
public class A
{
    public string Name { get; set; }
}
}

そして、それは楽しかったです...スクリプトのスコープに変数を作成し、値をエクスポートすることができます。

最後に理解すべきことが1つあります...静的なもの(Webアプリでこれを使用することを考えている)を使用せずに、(たとえば、ルールスクリプトを適用するドメインエンティティ)で値を取得するにはどうすればよいですか? ?

コンパイルされたデリゲートの使用を見てきましたが、それは以前のバージョンのMono.CSharpの場合であり、もはや機能していないようです。

誰かが現在のバージョンでこれを行う方法についての提案がありますか?

どうもありがとう。

参照:*変数をMono.CSharp.Evaluatorに挿入します(文字列からLINQクエリをコンパイルするランタイム) * http://naveensrinivasan.com/tag/mono/

4

1 に答える 1