如何动态执行c#代码

本文关键字:执行 代码 动态 何动态 | 更新日期: 2023-09-27 18:26:36

我正在进行C#3.5 winforms项目。

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

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

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

这可能是动态的吗?

如何动态执行c#代码

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

此链接可能会有所帮助:

使用CodeDOM

在.Net 中动态执行代码

如果您想要一个"纯"的Microsoft解决方案,您应该在Roslyn发货后查看它。但在那之前,你可能想看看CodePlex:上的快速轻量级表达式计算器项目

Flee是.NET框架的表达式解析器和计算器。它允许您在运行时计算字符串表达式(如sqrt(a^2+b^2))的值。它使用自定义编译器、强类型表达式语言和轻量级代码生成将表达式直接编译到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!

Mono团队通过实现

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

如果你想使用微软的产品,你将不得不等待Roslyn,

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