如何动态执行c#代码

时间:2012-03-03 10:52:03

标签: c# winforms dynamic

我正在研究C#3.5 winforms项目。

我想动态执行一些代码,这是一个字符串变量。 代码,我想执行的是这样的:

(GetSetting("MYSETT1") == 1? "OK" : "Cancel")

我想使用项目中存在的方法,并使用它们,我想执行一些任务。

可以动态吗?

3 个答案:

答案 0 :(得分:1)

如果您正在使用“纯粹”的Microsoft解决方案,那么一旦发货,您应该查看Roslyn。但在此之前,您可能需要查看CodePlex上的Fast Lightweight Expression Evaluator项目:

  

Flee是.NET框架的表达式解析器和评估器。它允许您在运行时计算字符串表达式的值,例如sqrt(a ^ 2 + b ^ 2)。它使用自定义编译器,强类型表达式语言和轻量级codegen将表达式直接编译为IL。这意味着表达式评估非常快速有效。试试演示,它可以让你根据表情生成图像,并亲自看看。

如果这不符合您的账单,您应该查看我自己项目的无耻自我推销,如下所示。

ExpressionEvaluator

  

ExpressionEvaluator是一个帮助开发人员评估C#和VB .NET表达式的库。您需要评估的表达式是通过.NET Framework自己的CodeDOM编译的,因此几乎支持所有语言功能。该库可以将远程对象暴露给表达式,以实现类似脚本的功能。所有表达式评估都是沙箱化的。

示例

static void Main(string[] args)
{
    var expressions = new List<string>
                            {
                                "3 * 5",
                                "Log10(50)",
                                "Parameters!Greeting + \" World!\""
                            };

    // An ExpressionMeta contains the expressions and extensions to be compiled.
    var meta = new ExpressionMeta("VisualBasic");

    // Add the expressions to be compiled.
    foreach(var expression in expressions)
        meta.AddExpression(expression);

    // Add the extensions to be compiled.
    var extension = new Dictionary<string, string> {{"Greeting", "Hello"}};
    meta.AddExtensionIgnoreAssembly(new Extension("Parameters", extension));

    // Compile the expressions
    using(var evaluator = meta.Compile())
    {
        // Evaluate the expression
        foreach(var expression in expressions)
            Console.WriteLine("{0}", evaluator.Evaluate(expression));
    }
}

<强>输出

15
1.69897000433602
Hello World!

答案 1 :(得分:1)

您可以动态编译代码并执行。

此链接可能会有所帮助:

Using the CodeDOM

Dynamically executing code in .Net

答案 2 :(得分:0)

Mono团队可以通过

实现目标

http://www.mono-project.com/CsharpRepl

如果您想使用Microsoft的产品,则必须等待Roslyn,

http://visualstudiomagazine.com/articles/2011/11/16/the-roslyn-scripting-api.aspx