当前位置:   article > 正文

C#脚本编辑器和引擎

c#脚本

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

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

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

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

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

下载地址:https://gitee.com/dev2022/super-script-community.git

以下是扩展简单示例:

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

脚本调试:

程序发布后,如何进行脚本代码调试,目前脚本编辑器调试版本还在研发测试中。不过,可以通过下面这种方式进行调试!

只要电脑上安装visual studio即可(vs2010及以上版本等都可以),这样就可以使用vs的强大调试功能了。

如何使用Visual Studio进行调试:

(1)启用调试模式

(2)打开VS附加程序进程

(3)运行程序,即可命中断点跳转到vs并指向代码断点位置

示例代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.IO;
  11. using BCL.SuperScript;
  12. using BCL.SuperScript.Engine;
  13. using System.Diagnostics;
  14. namespace TestScript
  15. {
  16. public partial class FrmTest : Form
  17. {
  18. /// <summary>脚本对应的基类</summary>
  19. private CalcBase calcBase = null;
  20. //每个脚本文件都要对应一个基类,下面定义一个计算的基类
  21. public class CalcBase
  22. {
  23. //这里定义了一个计算的方法,当然这里还可以定义其他更多方法
  24. /// <summary>计算</summary>
  25. /// <param name="input">输入</param>
  26. /// <returns>输出</returns>
  27. public virtual string Calc(string input)
  28. {
  29. string output = input;
  30. return output;
  31. }
  32. }
  33. /// <summary>脚本构造器</summary>
  34. private WagScriptBuild<CalcBase> build = null;
  35. //脚本可以存储到文件,数据库表中,等等,下面以脚本存储到文件为示例
  36. //程序目录下放了2个脚本文件:calc_template.script 和 calc_custom.script
  37. //脚本文件的即是基类的默认实现子类,格式和内容可查看2个示例文件
  38. /// <summary>默认初始化脚本读取和存储的文件路径</summary>
  39. private string _file_script_template = Path.Combine(Application.StartupPath, "calc_template.script");
  40. /// <summary>自定义脚本读取和存储的文件路径</summary>
  41. private string _file_script_custom = Path.Combine(Application.StartupPath, "calc_custom.script");
  42. /// <summary>脚本内容</summary>
  43. private string _script = "";
  44. public FrmTest()
  45. {
  46. InitializeComponent();
  47. //软件启动的地方加上脚本组件的注册(社区版免费版授权)
  48. bool regSuccess = false;
  49. string regMessage = "";
  50. regSuccess = WagScriptLic.Reg("community", "117faef434b61d2f1e906ba261877025302fa9f9c8e6701ae2e5d6a32436df02dbfb99cab52e908bf3a52ec33d989b4862d116ee5b1ab5a2b6ba2cf2ad0eaf582f870d56966c3fce6452b781f6cfb37558eac161ce592eebf7362aea010c8cd8d879f1c1242ac1573dff9cad14f8fbdc98fb92f78002e6e3c009c9752b18e1b0fc1d1aafec259bf668402652aa2c6abb49264b278562175f24b95168da61d96b3d5ea460b9fb94dd396ddb1eb898dd6008f9efdad7ceb978ba82b884fe0d69cf42a0d3f2d10236cc521a94ef068e38533045f945fb601424b8aa729360f9dcb13b0b87d95be61b9a87f2b384a5080feeddb0faa28a30b4c78449769de83ddfa1490d783893d20a29f9a61d5e6b7494d62d90b271ec8f606db1d5de7b4035845c2f5bcbcec0d487449d97dafd14d0a7f8", ref regMessage);
  51. if (!regSuccess)
  52. {
  53. MessageBox.Show(regMessage, "Reg");
  54. }
  55. //读取文件中的脚本内容
  56. //如果用户首次使用脚本,则加载默认脚本模板,否则使用上次存储的脚本
  57. if (!File.Exists(_file_script_custom))
  58. {
  59. if (!File.Exists(_file_script_template))
  60. {
  61. MessageBox.Show($"未找到脚本模板(模板脚本),请检查:{_file_script_template}");
  62. this.btn_srcipt.Enabled = false;
  63. return;
  64. }
  65. File.Copy(_file_script_template, _file_script_custom);
  66. }
  67. string data = File.ReadAllText(_file_script_custom, Encoding.UTF8);
  68. _script = data;
  69. }
  70. private void _Load(object sender, EventArgs e)
  71. {
  72. if (!string.IsNullOrWhiteSpace(_script))
  73. {
  74. build = new WagScriptBuild<CalcBase>(_script);
  75. calcBase = build.BuildScript(false);//编译脚本
  76. if (calcBase == null)
  77. {
  78. MessageBox.Show($"脚本编译异常: {build.m_sScriptError}");
  79. calcBase = new CalcBase();
  80. }
  81. }
  82. else
  83. {
  84. calcBase = new CalcBase();
  85. }
  86. }
  87. /// <summary>修改脚本</summary>
  88. private void btn_srcipt_Click(object sender, EventArgs e)
  89. {
  90. build.EditExistingScript(true);
  91. string s = build.m_WagScriptSupport.SaveToStr("");
  92. _script = s;
  93. File.WriteAllText(_file_script_custom, s, Encoding.UTF8);//存储修改后的脚本到文件
  94. calcBase = build.BuildScript(false);//再次编译脚本
  95. }
  96. /// <summary>计算</summary>
  97. private void btn_run_Click(object sender, EventArgs e)
  98. {
  99. string input = this.txt_input.Text.Trim();
  100. string output = this.calcBase.Calc(input);
  101. this.txt_output.Text = output;
  102. }
  103. }
  104. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/108347
推荐阅读
相关标签
  

闽ICP备14008679号