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);    

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

时间: 2024-10-08 16:18:58

Script.NET实现脚本库的相关文章

SOAPUI中文教程---脚本和脚本库

SoapUI为脚本编写提供了广泛的选择,使用Groovy或Javascript(由SoupUI 3.0开发)作为脚本语言,使用哪些选项可在左下方的项目详细信息选项卡中设置项目级别. 这里提供的大部分文档将适用于Groovy语言,因为它可以大大简化Java API的脚本(您可以在Groovy网站上获取更多信息,教程等). 本文档将进一步介绍如何使用JavaScript的概述. 脚本可以在了SoapUI以下地方使用: Groovy Script TestStep 运行测试之前和之后运行一个TestC

[翻译]Component Registration in Script System 在脚本系统中注册组件

Component Registration in Script System 在脚本系统中注册组件   To refer to our component from a script, the class, its properties and methods must first be registered in the script system. You may place the registration code in a file with the same name as the

JS(JavaScript)脚本库的积累

在现在互联网盛行的时代,使得B/S架构飞速发展.曾经在大学的时候我一直都梦想着毕业后要找一个像腾讯这样大企业做C/S方面的开发工作(其实现在腾讯也有很多B/S软件),因为C/S体验度非常高,感觉非常好.但是此时此刻,我却没有这样的想法了.这是为什么呢?对于有经验的软件工程师都很清楚,B/S的程序部署在服务器,客户端只需要浏览器即可使用,而C/S需要客户在终端安装客户端程序,所以B/S在维护和升级方面的简易性上,无疑有独有优势,而且对客户端的硬件要求相对于C/S软件一般都要低.B/S当然它也有它的

Cross Frame Script (跨框架脚本) 攻击

一.Cross Frame Script (跨框架脚本) 攻击 什么是Cross Frame Script? 很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器打开. <html> <head> <title>IE Cross Frame Scripting Restriction Bypass Example</title> <script> var keylog=''; document.onkeypr

Node: 使用Express脚本库搭建本地的Web服务器

一.简介 在之前学习的React开发中,一直使用create-react-app脚手架创建和开发Web项目,通过搭配ReactRouter路由实现静态页面的交互,然后通过yarn start或npm start来启动项目,这个启动过程是由客户端服务器执行的.使用express脚手架生成的应用可以作为后台服务器,默认监听3000端口,该后台服务器可以监听React项目,与React应用进行数据交互. 二.安装 必须先安装过node,express安装步骤如下: //1.安装Express脚手架 s

React: 使用express脚本库

一.简介 众所周知,服务器的功能非常强大,它能够访问所有资源的能力是浏览器所不具备的.服务器可以非常安全,并且可以安全地访问数据.用户可以在服务端渲染初始内容的优势上充分利用这些额外的优点.在上篇中已经介绍过了通过Express脚手架来创建本地的Web后端服务器与React客户端服务器进行数据通信,虽然这个方案是可行的,但是过程还是比较复杂,因为我们需要同时分别启动两个服务器.那么有没有一个方案使用一行命令可以同时启动两个服务器.答案是有的.可以通过express脚本库和concurrently

TiOps脚本库如何使用

TiOps提供了脚本库的功能,用于统一存放和授权脚本.TiOps的脚本库,最大的特点是,它可以支持脚本版本的功能,有点gitlab网页版的感觉.登录TiOps,在左侧菜单栏中选择[脚本库],默认里面是没有任何脚本的,需要我们先创建脚本库点击确定,一个脚本库就创建好了,创建完成之后,如下图左侧会有一个文件夹,默认名称和脚本库的名称相同,这里还可以创建新的文件夹,选择左侧文件夹,右侧可以创建脚本,上传脚本,更多里面是复制和移动脚本,点击创建脚本脚本创建完成之后,会看到如下的界面,点击编辑,在编辑框中

#检查磁盘使用率超过90%,并且后台进程没有rman在跑,就运行 /data/script/del_dg_arch.sh 脚本清理归档

#检查磁盘使用率超过90%,并且后台进程没有rman在跑,就运行  /data/script/del_dg_arch.sh 脚本清理归档 a=`df -m /data |tail -n 1|awk '{print int($5)}'` b=`ps -ef|grep rman|grep -v grep|wc -l` if [[ $a -lt 90 && $b -lt 1 ]] then echo $a >> /home/oracle/archbak.log echo $b >

一起来学linux:shell script(二)关于脚本

p { margin-bottom: 0.25cm; line-height: 120% } (一)首先来看shell脚本的执行方式,shell脚本的后缀名都是sh文件. 1 sh test.sh 2 source test.sh 这两种方式有什么区别呢.test.sh 里的脚本很简单, 从键盘输入名字后赋值个name变量 read -p "Please input your name:" name 执行如下 [email protected]:/home/zhf/zhf/shell_