C#脚本编辑器和引擎

SuperScript是C#脚本引擎,它为您的WinForms和WPF应用程序带来了高效的代码编辑功能。

它提供了代码编辑功能,如语法高亮显示、智能代码提示和代码完成、语法错误,

它支持类库引用,编译及导出等等,使用它好比您在Visual Studio中编码一样,速度和便利性相媲美。

使用它,可以极大的发挥您的应用程序扩展和开放性,

使得您的程序在发布后,也可支持用户自定义编辑和运行脚本。
 

C#脚本编辑器和引擎_第1张图片

以下是扩展简单示例:

比如您的应用程序有个计算功能,它允许用户根据用户输入值,通过编辑脚本自定义输出结果功能,如实现字符串倒叙功能。

C#脚本编辑器和引擎_第2张图片

C#脚本编辑器和引擎_第3张图片

 

示例代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using BCL.SuperScript;
using BCL.SuperScript.Engine;
using System.Diagnostics;

namespace TestScript
{
    public partial class FrmTest : Form
    {
        /// 脚本对应的基类
        private CalcBase calcBase = null;

        //每个脚本文件都要对应一个基类,下面定义一个计算的基类
        public class CalcBase
        {
            //这里定义了一个计算的方法,当然这里还可以定义其他更多方法

            /// 计算
            /// 输入
            /// 输出
            public virtual string Calc(string input)
            {
                string output = input;
                return output;
            }
        }


        /// 脚本构造器
        private WagScriptBuild build = null;

        //脚本可以存储到文件,数据库表中,等等,下面以脚本存储到文件为示例
        //程序目录下放了2个脚本文件:calc_template.script 和 calc_custom.script
        //脚本文件的即是基类的默认实现子类,格式和内容可查看2个示例文件

        /// 默认初始化脚本读取和存储的文件路径

        private string _file_script_template = Path.Combine(Application.StartupPath, "calc_template.script");

        /// 自定义脚本读取和存储的文件路径
        private string _file_script_custom = Path.Combine(Application.StartupPath, "calc_custom.script");



        /// 脚本内容
        private string _script = "";


        public FrmTest()
        {
            InitializeComponent();

            //组件试用版注册授权
            WagScriptLic.Reg("demo", "20220921-0900");

            //读取文件中的脚本内容

            //如果用户首次使用脚本,则加载默认脚本模板,否则使用上次存储的脚本
            if (!File.Exists(_file_script_custom))
            {
                if (!File.Exists(_file_script_template))
                {
                    MessageBox.Show($"未找到脚本模板(模板脚本),请检查:{_file_script_template}");
                    this.btn_srcipt.Enabled = false;
                    return;
                }

                File.Copy(_file_script_template, _file_script_custom);
            }

            string data = File.ReadAllText(_file_script_custom, Encoding.UTF8);
            _script = data;

        }


        private void _Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(_script))
            {
                build = new WagScriptBuild(_script);

                calcBase = build.BuildScript(false);//编译脚本

                if (calcBase == null)
                {
                    MessageBox.Show($"脚本编译异常: {build.m_sScriptError}");
                    calcBase = new CalcBase();
                }
            }
            else
            {
                calcBase = new CalcBase();
            }
        }



        /// 修改脚本
        private void btn_srcipt_Click(object sender, EventArgs e)
        {
            build.EditExistingScript(true);

            string s = build.m_WagScriptSupport.SaveToStr("");
            _script = s;

            File.WriteAllText(_file_script_custom, s, Encoding.UTF8);//存储修改后的脚本到文件

            calcBase = build.BuildScript(false);//再次编译脚本

        }

        /// 计算
        private void btn_run_Click(object sender, EventArgs e)
        {
            string input = this.txt_input.Text.Trim();
            string output = this.calcBase.Calc(input);
            this.txt_output.Text = output;
        }







    }
}

你可能感兴趣的:(.NET,wpf)