首页 > 代码库 > Script.NET实现脚本库

Script.NET实现脚本库

  Script.NET本身没有实现调用脚本库的功能。如果将一堆已经定义好的函数放在一个脚本文件里头作为脚本库,要调用这个脚本库时只需要稍作改动就行。

首先建立一个XML文档专门存放哪个脚本会调用哪些库,结构如下

技术分享
<?xml version="1.0" encoding="utf-8" ?>
<LibMapping>
  <MainScript scriptName="">
    <LibScript libFileName=""/>
  </MainScript>
</LibMapping>
技术分享

例如:

技术分享
<?xml version="1.0" encoding="utf-8" ?>
<LibMapping>
  <MainScript scriptName="script1.txt">
    <LibScript libFileName="lib1.txt"/>
    <LibScript libFileName="lib3.txt"/>
  </MainScript>
  <MainScript scriptName="script2.txt">
    <LibScript libFileName="lib1.txt"/>
    <LibScript libFileName="lib2.txt"/>
  </MainScript>
</LibMapping>
技术分享

然后在执行脚本之前分析XML,通过scriptName属性找出它需要调用的脚本库,利用IO操作读取脚本库文件并添加到脚本的字符串中,代码如下

技术分享
            string script = string.Empty;
            script += File.ReadAllText("script1.txt")+"\n";//读取脚本文件
            
            string libScript = string.Empty;
            //分析XML文件
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("LibMapping.xml");
            XmlNode mainNode = xmlDoc.SelectSingleNode(string.Format("//LibMapping/MainScript[@scriptName=‘{0}‘]", "script1.txt"));
            if (mainNode != null)
            {
                XmlNodeList libList = mainNode.ChildNodes;
                //读取脚本库
                foreach (XmlNode node in libList)
                {
                    string fileName = node.Attributes["libFileName"].Value;
                    libScript += File.ReadAllText( fileName) + "\n";
                }
            }
            script+= libScript;
Script s = Script.Compile(script);
技术分享

这样做的弊端是调试时不方便,如果脚本代码出错或有异常,简单的字符串拼接会使出错代码的行数有可能不正确,查找错误代码时有困难,希望有哪位大侠给出更好的解决办法。

Script.NET实现脚本库