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


浙公网安备 33010602011771号