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