.NET 动态脚本语言

Script.NET (S#) 是一种允许为你的应用程序自定义行为,与本地.NET对象、类型和组件交互动态的脚本语言。托管应用程序本身可以改变一个xml配置脚本运行时的默认行为,更换绑定的方法,属性,构造原生的行为.NET类型,名称,函数和类型的解析等。

Script.NET 支持以下平台:

  • .NET Framework 2.0, 3.5
  • Compact Framework 3.5
  • Silverlight 4
  • XBox (via XNA framework)

下载地址:http://www.protsyk.com/scriptdotnet/versions/latest/

新建一个控制台项目之后,添加ScriptDotNet.dll的引用,程序代码如下

using System;
using ScriptNET;
using ScriptNET.Runtime;

namespace TestScript
{
    class Program
    {
        static void Main(string[] args)
        {
            RuntimeHost.Initialize();

            //运行Script.NET脚本
            Script s = Script.Compile(@"
                s='hello'+' '+'world';
                Console.WriteLine(s);");
            s.Execute();

            //运行Script.NET的代码片段
            object obj = Script.RunCode(" return 1+1;");
            Console.WriteLine(obj);
        }
    }
}

这里用到两个类:RuntimeHostScript


RuntimeHost
是脚本处理运行时基础设施的集成核心点。它必须在使用script.net 类库前初始化。

RuntimeHost.Initialize();

  这是通过默认配置初始化运行时,但这个对于Win32的默认配置与Silverlight 和CF是不同的。

下面这个重载可以使用自定义配置:

public static void Initialize(Stream configuration);

  参数是有效的XML配置文件的文件流。

在配置设置时,运行时有一些可定制的部分:

  • Binder -- 用于绑定对象的成员;
  • Activator -- 用于构造对象的实例,默认的Activator 用binder来绑定类型的构造函数;
  • Scope Factory -- 用于生成给定类型的作用域;
  • Assembly and Type Manager -- 用于载入程序集,预览它们的类型,管理及解决给定的名称。不同平台的默认程序集管理是不同的。
  RuntimeHost.Binder = new DefaultBinder();
  RuntimeHost.Activator = new DefaultActivator();
  RuntimeHost.ScopeFactory = new ScopeFactory();
  RuntimeHost.AssemblyManager = new DefaultAssemblyManager();

  RuntimeHost.Initialize();

  若要清除RuntimeHost的所有信息,可以调用 

RuntimeHost.CleanUp();

  

Script用于编译代码

(这图是1.0.0.3的,会与现今版本的有差异)

 

 

此外,从这里Script.NET for .NET 3.5 (old version)可以下载一个IDE,方便脚本的调试。

 数据类型和常量

  

类型名称对应.NET的类型初始化常量
doubledoublex=3.14;数字串
longlongx=1;数字串
string strings=‘Hello World’;单引号或双引号括起来的符号串
boolboolbool=true;true/false
arrayobject[]a=[3.14 , 1 , "Hello world" , true , s ]由方括号括起的变量名或常量序列

此外null表示对象为空

运算符

运算符类别  运算符
基本

x.y

f(x)

a[i]

x++

x--

一元

+

-

!

~

++

--

乘法

*

/

%

加法

+

-

关系和类型检测

<

>

>=

<=

is

 

相等

==

!=

逻辑“与”&
逻辑“或”|
条件 AND&&
条件 OR||
赋值

=

+=

-=

 

表达式

例子如下:

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

流程控制

  顺序 (略)

  分支

  if (Expression) statement [ else if (Expression) statement ] else Statement

       

if(1<0)
        b=1;


if(1<3)
    b=2;
else 
    b=3;   


if(1<0)
    b=1;
else if(1>3)
    b=2;
else 
    b=3;     

  

switch (expr)


  case expr1: statement 
   ... 
  default: statement 
}

  

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

 

循环

  for(Expression1;Expression2;Expression3) Statement

sum=0; 
for(i=0; i<10; i++) 
   sum = sum + a[i];
  foreach (Identifier in Expression) Statement
a=[1,2,3,4,5];
sum = 0; foreach(i in a )
sum = sum + i;
  while (Expression) Statement
while(i<100)
    i++;
break, continue   只用于循环语句中,用于跳出循环
return  用于返回函数

Using语句块

using(type or object){
Statement
}
using (Math) {
    return Pow(2,10);
  }


a = new List<|int|>();
using(a){
    Add(10);
  }
return a[0];

try...catch....finally  语句块

 try

{

    ....

}

catch(e)

{

    ......

}

finally

{

    ......

}

函数 (function)

函数的定义语法如下

function functionName(p1,p2,...pn)

{

statement

}

 以下是Script.NET的内置函数

eval – 求表达式的值并返回,例子 a = eval('2+3*4');

clear – 清空上下文变量,已经过时

array - 创建数组,例子 a = array('alex', 'peter'); // a is of type string[]   又如    b = array('alex', 1, 2); // b is of type object[]

 

  由于Script.NET可以调用.NET的类库,所以其内置函数就不多了。说到调用类库,免不了要加载dll。加载dll的方式有两种,一种是通过创建新的DefaultAssemblyManager对象

 RuntimeHost.AssemblyManager = new DefaultAssemblyManager();

 ,调用其AddAssembly方法把Assembly逐一添加进去。(注意:一旦应用这种方式添加程序集,则要把所有需要用到的dll都添加进去,甚至连Console所在的dll——mscorlib.dll)。另一种是通过其专用的配置文件添加,配置文件格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
  <References>
  </References>
  <Types>
  </Types>
  <Scopes>
  </Scopes>
  <Operators>
  </Operators>
  <Settings>
  </Settings>
  <Initialization>
    <![CDATA[
    ]]>
  </Initialization>
</Configuration>

在References节点内添加则行,例如

  <References>
    <Assembly name="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" sn="true"/>
  </References>

凡是加载进去的程序集,RuntimeHost都会自动using程序集里所有的命名空间。这样会引发脚本的安全性问题,此问题有待解决。。。

 

参考资料:   http://www.cnblogs.com/jamesli2015/archive/2011/09/21/2183072.html

               http://www.codeproject.com/Articles/20760/Script-NET-a-language-for-embedding-scripting-func

      http://www.protsyk.com/scriptdotnet/wiki/index.php?title=ManualContent

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值