使用DynamicMethod进行脚本编写

时间:2011-05-29 17:53:45

标签: c# scripting

文章C# scripts using DynamicMethod中对此进行了描述 我看到的优点 - 第一次调用将比使用CSharpCodeProvider快得多。

这种方法的缺点是什么?

2 个答案:

答案 0 :(得分:2)

我刚读完C# Scripts using DynamicMethod

的源代码

我认为最不容忍的缺点是:太太太复杂了。在.Net 4.0中,我们可以使用DLR和ironpython来编写使用DynamicMethod的5%代码行的脚本。 DLR更新,这是趋势。

DLR和IronPython的一些代码示例:

var scriptEngine = Python.CreateEngine();
var scriptSource = scriptEngine.CreateScriptSourceFromString(@"# coding=utf-8
def execute(command):
    exec(command)
");
scriptScope = scriptEngine.CreateScope();
scriptSource.Execute(scriptScope);
dynamic execute = scriptScope.GetVariable("execute");
execute("print 'hello world'")

只有伪代码,你必须修改上面的代码才能编译和运行。我编写了上面的代码,向您展示如果使用DLR和Ironpython而不是DynamicMethod会有多容易。

答案 1 :(得分:1)

DynamicMethod需要直接编写IL。该文章的作者显然编写了自己的编译器,将C#脚本转换为IL,可以加载到DynamicMethod中,但这可能非常脆弱。 CSharpCodeProvider使用csc,它是在Visual Studio(almost)中运行的相同编译器,因此它可能更加可靠。