如何在C#中创建应用程序脚本?

tom*_*ene 11 .net c# scriptable

我有一个用C#编写的桌面应用程序我想在C#/ VB上编写脚本.理想情况下,用户可以打开侧窗格并编写类似的内容

foreach (var item in myApplication.Items)
   item.DoSomething();
Run Code Online (Sandbox Code Playgroud)

语法高亮和代码完成会很棒,但我可以没有它.我希望需要用户拥有Visual Studio 2010的安装.

我正在考虑调用编译器,加载和运行输出程序集.

有没有更好的办法?

Microsoft.CSharp答案吗?

Byr*_*ock 1

使用脚本语言。我想到了TclLUA甚至 JavaScript。

使用 Tcl 非常简单:

using System.Runtime.InteropServices;
using System;

namespace TclWrap {
    public class TclAPI {
         [DllImport("tcl84.DLL")]
         public static extern IntPtr Tcl_CreateInterp();
         [DllImport("tcl84.Dll")]
         public static extern int Tcl_Eval(IntPtr interp,string skript);
         [DllImport("tcl84.Dll")]
         public static extern IntPtr Tcl_GetObjResult(IntPtr interp);
         [DllImport("tcl84.Dll")]
         public static extern string Tcl_GetStringFromObj(IntPtr tclObj,IntPtr length);
    }
    public class TclInterpreter {
        private IntPtr interp;
        public TclInterpreter() {
            interp = TclAPI.Tcl_CreateInterp();
            if (interp == IntPtr.Zero) {
                throw new SystemException("can not initialize Tcl interpreter");
            }
        }
        public int evalScript(string script) {
            return TclAPI.Tcl_Eval(interp,script);        
        }
        public string Result {
            get { 
                IntPtr obj = TclAPI.Tcl_GetObjResult(interp);
                if (obj == IntPtr.Zero) {
                    return "";
                } else {
                    return TclAPI.Tcl_GetStringFromObj(obj,IntPtr.Zero);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

TclInterpreter interp = new TclInterpreter();
string result;
if (interp.evalScript("set a 3; {exp $a + 2}")) {
    result = interp.Result;
}
Run Code Online (Sandbox Code Playgroud)