IronPython - 最终用户编辑

时间:2011-10-25 22:06:12

标签: c# scripting ide ironpython dynamic-language-runtime

我们目前正在研究如何将IronPython(脚本)嵌入到我们的C#应用​​程序中。

我们看到它将为我们的最终用户带来的好处,让他们能够加入我们的应用程序但是一个不断出现的问题是我们如何为最终用户提供了解不同条目的代码编辑能力在我们的应用程序中的上下文。

我知道我们可以提供一个带语法高亮的简单文本编辑器,但是我们如何更进一步,允许用户针对我们从应用程序公开的对象测试他们的脚本。请记住,我们将根据入口点的上下文公开不同的对象。

如何允许最终用户在您的应用程序中测试,编写和编辑脚本?

PS - 我是新来的,所以如果我做得不对,请告诉我!!!

2 个答案:

答案 0 :(得分:2)

也许你想要的是使用Visual Studio 2010 Shell隔离。它可用于在应用程序中提供可视化工作室环境,类似于VBA过去的方式。就Python支持而言,您可以查看IPyIsolatedShell

答案 1 :(得分:1)

您可以在C#应用程序中托管IronPython。然后,您可以从C#应用程序传入变量并执行使用它们的IronPython代码。 Dino Viehland在PDC上就这个名为Using Dynamic Languages to Build Scriptable Applications的演讲进行了一次演讲。 Dino为他在PDC上创建的应用程序提供了source code,但它使用的是旧版本的IronPython。

以下是IronPython 2.7.1的一些代码,它们向您展示了如何在几行代码中托管IronPython。

using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

public class MyIronPythonHost
{
    ScriptEngine scriptEngine;
    ScriptScope scriptScope;

    public void Initialize(MyApplication myApplication)
    {
        scriptEngine = Python.CreateEngine();
        scriptScope = scriptEngine.CreateScope();
        scriptScope.SetVariable("app", myApplication);
    }

    public void RunPythonCode(string code)
    {
        ScriptSource scriptSource = scriptEngine.CreateScriptSourceFromString(code);
        scriptSource.Execute(scriptScope);
    }
}

上面的代码通过脚本范围将名为MyApplication的应用程序对象传递给IronPython,并将其变量名称设置为 app 。然后,此 app 变量可用于IronPython代码,可在其上调用方法,访问属性等。

上面代码中的最后一个方法是RunPythonCode方法,该方法接收用户编写的IronPython代码并执行它。

比这更进一步,允许用户以类似于调试VBA宏的方式调试他们的IronPython代码,但这是一项重要的开发工作。