.NET 动态脚本语言Script.NET 入门指南 Quick Start

Script.NET是一种动态脚本语言,旨在提供可扩展性和易于维护的特点。它支持.NET Framework的类型调用,具备简单直观的设计理念,包括函数定义、数据类型、表达式及语句等基本元素。此外,还支持与宿主环境的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Script.NET是一种动态的脚本语言,它使得程序可扩展,可定制,和维护性好。和Office系列的VB Script相似,可以在应用中嵌入大量的代码块,以便在运行时才执行这些代码。

Script.NET的设计理念是:简单(simplicity),有效率(efficiency),容易上手(intuitive)。先通过例子,来做一个基本的了解。

using System;
using System.Diagnostics;
using System.IO;
using ScriptNET;
using ScriptNET.Runtime;
namespace Debug.Net
{
    class Program
    {
        static void Main(string[] args)
        {
            RuntimeHost.Initialize();
            Script s = Script.Compile("Console.WriteLine('Hello World');");
            s.Execute();
            RuntimeHost.CleanUp();         
        }
    }

}

为了编译这个例子,请先添加对程序集ScriptDotNet.dll的引用,它的Target是.NET 3.5。这个例子可以看出,Script.NET是如何调用.NET Framework的类型,并调用它的方法。再来看一个例子

RuntimeHost.Initialize();
object obj=Script.RunCode(" return 1+1;");
Console.WriteLine(obj);

这个例子演示了,如何运行Script.NET的代码片段。

 

数据类型,常量,表达式,语句

作为一门语言,一般会包含语法,数据类型,表达式,语句,这是语言层面的基础内容。来看下面的表格,

Script.NET支持的数据类型

image

常量,boolean类型的常量是true或false, null表示对象为空,字符串用单引号括起来。

运算符号:+, -, *, / ,%, ! , | , & , != , > , < , is  。其中is用于对象类型。

请看下面的例子表达式,

X = (y+4)*2; 
Y = a[5] + 8; 
Z = Math.Sqrt(256); 
P = new System.Drawing.Point(3,4); 

语句 Script.NET程序是语句的集合,有三种常用的语句:顺序(sequencing ),循环(loop),分支(branching)

If ... Then ... Else ...     if (Expression) statement else Statement

if (x>0) y = y + 1 ; else y = y ?1;      if (x>0) message = 'X is positive';

For ...    for (Expression1;Expression2;Expression3) Statement

sum=0; 
for(i=0; i<10; i++) 
   sum = sum + a[i];

Foreach ... in ...    foreach (Identifier in Expression) Statement

arr=[1,2,3,4,5];    sum = 0; 
foreach(i in arr ) sum = sum + i;

While ...   while (Expression) Statement

while (i>0) i = i-1;

Switch

switch (expr){ 
case expr1: statement 
   ... 
default: statement 
}

switch (i){ 
   case 1: MessageBox.Show('Hello!'); 
   case 2: MessageBox.Show('?'); 
   default: MessageBox.Show('No way'); 
}

Break, Continue   只用于循环语句中,用于跳出循环
Return  用于返回函数(function)

 

函数 function

Script.NET是脚本语言,而不是面向对象的OOP语言。通常会将一将代码片段封装成函数,函数的定义语法如下

function(id1,id2,…,idn) {

statement} 

 

function fac(n){

  if (n==1) return 1;

  else return n*fac(n-1);

}

MessageBox.Show(fac(5).ToString());

Func_pointer = fac;

Func_pointer(4);


下面的代码,演示了Script.NET与Host的交互,从Host中获取值

RuntimeHost.Initialize();         
List<int> vals = new List<int>();
vals.AddRange(new int[] { 1, 2, 3, 4 });
Script script = Script.Compile(@"
         rez = 0;
         foreach (number in numbers)
         rez += number;"
          );

script.Context.SetItem("numbers", vals);
object rez = script.Execute();
Console.WriteLine(rez); 

运行程序,输出结果如下

image

 

Script Context  脚本上下文

脚本上下文存储运行时信息,变量,和引入的类型,它可以引入.NET的对象到脚本中,以运用.NET Framework的强大功能。下面的例子演示Script.NET与Host的类型互操作

class Program
    {
        static void Main(string[] args)
        {
            RuntimeHost.Initialize();
            Type type = RuntimeHost.GetType("A");
            object script = Script.RunCode(@" a=new A();
                          a.Name='From Script.NET';
                           return a.Name;
                           ");
            Console.WriteLine(script);
        }
    }
    public class A
    {
        public string Name { get; set; }
    }

在Host中定义类型A,并引用它,可以在Script.NET中直接使用。也可在Host中定义类型,然后把它的值传到Script.NET中,请看例子

RuntimeHost.Initialize();
Type type = RuntimeHost.GetType("A");
A a = new A();
a.Name = "From Host";
Script script = Script.Compile(@"
                 ab.Name='From Script.NET';
                  return ab.Name;
                   ");
script.Context.SetItem("ab", a);
script.Execute();
Console.WriteLine(script);

启动调试,在script.Execute执行前后,对象a的Name属性值是不同的。

 
Runtime Configuration 运行时配置

在Script.NET压缩包的根目录,找到配置文件RuntimeConfig.xml,把它添加到项目中。它包含,要引用的程序集,类型映射,和运行Script.NET引擎时,可以指定的初试化代码。

<References> 
   <Assembly name="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" sn="true"/> 
</References> 
<Types> 
   <Type alias="string" name="System.String" /> 
   <Type alias="int" name="System.Int32" />

   ……

</Types>

<Initialization> 
    <![CDATA[ 
    ]]> 
  </Initialization>

比如,可以在Initialization区域定义数值常量,或是初始化代码,如下所示

<Initialization> 
    <![CDATA[ 
       Pi=3.14; 
       Console.WriteLine('Jack is right'); 
    ]]> 
  </Initialization>

再回到Script.NET脚本代码中,代码如下

RuntimeHost.Initialize(new FileStream("RuntimeConfig.xml",FileMode.Open));
Script script = Script.Compile(@"
                 Console.WriteLine(Pi);                           
                   ");
script.Execute();
Console.WriteLine(script);

运行程序,可看到控制台输邮结果如下

image

注意,Script.NET的标识符是大小写敏感的,如果在脚本调用中把Pi写成了PI,会报异常。

Unhandled Exception: ScriptNET.Runtime.ScriptIdNotFoundException: Namespace PI is not found

 

Script.NET原来的名称是S#, 文档和实际的代码有差异。我是根据对.NET的理解来推断它的用法,发生错误的原因,再加上它本身是个开放源码的项目,可以直接集成到现有的应用程序中,发生错误也可以源代码的方式调试。以这种方式,可以将应用程序代码中,将需要动态编译的代码,转化为Script.NET的脚本,借助于Script.NET的强大功能,增加应用程序的灵活性。

Script.NET是通用的脚本语言开发平台,目前支持Tcl、Python、Lua、NSIS脚本的开发,支持脚本语言的开发、运行、调试、编译、生成可执行文件等功能。Script.NET采用类似于Eclipse的插件化开发方式,大部分功能都以插件的形式提供,可以灵活扩展,除了用于脚本开发之外,也可以扩展为各种富客户端应用程序。<br>Script.NET从2000年开始开发,发布过V1.0和V2.0两个大版本,经过8年的不断优化完善,目前在架构方面已经比较合理,完善的插件机制,使得Script.NET平台可以非常容易的扩展更多的功能。可以访问主页 http://www.blueantstudio.net 了解更多信息。<br><br>Script.NET V2.0.2版本开始将基础平台和脚本开发包分离,此处下载的是基础运行平台,要使用某种脚本语言的开发功能,可以到蓝蚂蚁工作室网站下载相应语言的开发包,下载地址:<br>http://www.blueantstudio.net/scriptnet/download/download.htm<br><br>Script.NET主要功能特性如下: <br>1、编辑、调试、运行tcl、python、lua脚本; <br>2、脚本的编译/加密和生成可执行文件(每种脚本语言支持的程度不同); <br>3、效率分析等辅助功能(目前只有tcl脚本支持了此功能); <br>4、关键字帮助,通过F1键或鼠标移动到关键字上,获取详细的帮助信息; <br>5、收集了较多的脚本扩展包、帮助文档和演示程序,目前tcl的扩展包收集较多,其他脚本也正在收集完善,除了常用的tk、wx、pmw,还有图象、多媒体、界面库等很多各种各样的扩展包,以后我们打算通过在线更新的方式使用户可以更方便的获取到各种扩展包; <br>6、附带了ftp、代码统计、正则表达式等一些扩展工具; <br>7、采用灵活的可扩展架构,整个系统可以灵活的扩展各种解释器、界面组件、工具、工程、界面风格等; <br>8、支持控制台功能(目前仅有tcl控制台、telnet控制台、串口控制台可用,其他脚本控制台正在开发); <br>9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; <br>10、封装的TclFace页面扩展包,可以通过面向对象的tcl脚本生成各种平台的页面功能。
Script.NET是蓝蚂蚁工作室开发的一套用于Tcl/Python/Ruby/Lua/NSIS 等脚本语言开发的集成开发环境,刚刚发布的2.1.1版本新增了Ruby脚本的支持,可以支持Ruby脚本的开发、调试、生成可执行文件、控制台等功能,可以支持wxRuby、RubyTk等界面库,目前还不支持Rails的调试,后续版本会不断完善。 下载地址和详细介绍请请参考蓝蚂蚁工作室的主页: http://www.blueantstudio.net Script.NET主要功能特性如下: 1、编辑、调试、运行tcl、python、lua、ruby脚本; 2、脚本的编译/加密和生成可执行文件(每种脚本语言支持的程度不同); 3、效率分析等辅助功能(目前只有tcl脚本支持了此功能); 4、关键字帮助,通过F1键或鼠标移动到关键字上,获取详细的帮助信息; 5、收集了较多的脚本扩展包、帮助文档和演示程序,目前tcl的扩展包收集较多,其他脚本也正在收集完善,除了常用的tk、wx、pmw,还有图象、多媒体、界面库等很多各种各样的扩展包,以后我们打算通过在线更新的方式使用户可以更方便的获取到各种扩展包; 6、附带了ftp、代码统计、正则表达式等一些扩展工具; 7、采用灵活的可扩展架构,整个系统可以灵活的扩展各种解释器、界面组件、工具、工程、界面风格等; 8、支持控制台功能(目前支持tcl/python/lua/ruby控制台、telnet控制台、串口控制台可用,其他脚本控制台正在开发); 9、Script.NET作为一个通用平台对外提供了很多接口,可以通过脚本等方式调用平台的各种功能,其中的tcl语言支持很多平台扩展命令,可以通过tcl操纵平台的各种功能,对平台进行扩展; 10、封装的TclFace页面扩展包,可以通过面向对象的tcl脚本生成各种平台的页面功能,此扩展包除了可以用于本地应用程序生成页面之外,还可以运行于AOLServer WEB服务器,作为一种类似于JSF的服务器端脚本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值