第16章 基于动态编译的vbnet脚本引擎

第16章 基于动态编译的vbnet脚本引擎

ID:24588919

大小:595.00 KB

页数:28页

时间:2018-11-14

第16章 基于动态编译的vbnet脚本引擎_第1页
第16章 基于动态编译的vbnet脚本引擎_第2页
第16章 基于动态编译的vbnet脚本引擎_第3页
第16章 基于动态编译的vbnet脚本引擎_第4页
第16章 基于动态编译的vbnet脚本引擎_第5页
资源描述:

《第16章 基于动态编译的vbnet脚本引擎》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第16章基于动态编译的VB.NET脚本引擎16.1脚本的原理16.2软件开发16.3Window全局对象16.4测试脚本引擎16.5部署脚本引擎16.1脚本的原理脚本也采用多种编程语言,比如JavaScript语言,VBScript语言或者其他的,若采用VB则称为VB脚本,图16.1所示的为脚本原理图。16.1脚本的原理图16.2所示的为常规编程开发软件的原理图。16.1.1VB.NET脚本原理VB.NET脚本就是采用VB.NET语法的脚本。VS.NET集成开发环境提供的宏也是采用VB.NET语法。微软.NET框架提供了一个脚本引擎,那就是在程序集

2、microsoft.visualbasic.vsa.dll中的类型Microsfot.VisualBasic.Vsa.VsaEngine,该类型在微软.NET框架1.1和2.0中都有,使用起来不算容易,而且在微软.NET框架2.0中VsaEngine类型标记为“已过时”。在此不使用VsaEngine类型来实现VB.NET脚本,而是使用动态编译技术来实现脚本引擎。16.1.2VB.NET脚本引擎设计这里将用倒推法来设计VB.NET脚本引擎,也就是从预期的最终使用结果来反过来设计脚本引擎。主程序将按照名称来调用脚本方法,很显然VB.NET代码编译生成的

3、是一个.NET程序集类库,为了方便起见,将所有的VB.NET脚本方法集中到一个VB.NET脚本类型。将脚本方法定义为静态方法,主要有两个好处,首先脚本引擎不必生成对象实例,其次能避免由于没有生成对象实例而导致的空引用错误,这样能减少脚本引擎的工作量。16.1.2VB.NET脚本引擎设计设计如下的参与动态编译的VB.NET脚本代码的结构:OptionStrictOffImportsSystemImportsMicrosoft.VisualBasicNamespaceNameSpaceXVBAScriptEngienModulemdlXVBAScrip

4、tEnginesub脚本方法1()'VB.NET代码endsubsub脚本方法2()'VB.NET代码endsubEndModuleEndNamespace16.2软件开发16.2.1参数控制属性为脚本引擎类型定义了几个属性用于保存脚本引擎运行所必备的基础数据。这些属性中最重要的属性就是用户设置的原始脚本代码文本。定义该属性的代码。16.2.2编译脚本1.生成脚本代码文本根据上述对运行时脚本的设计,用户可以导入其他的命名空间,于是脚本引擎定义了SourceImports属性来自定义导入的命名空间,定义该属性的代码如下:///

///

5、源代码中使用的命名空间导入///

privateStringCollectionmySourceImports=newStringCollection();//////源代码中使用的命名空间导入///publicStringCollectionSourceImports{get{returnmySourceImports;}}16.2.2编译脚本在脚本引擎的初始化过程中,程序会默认添加上System和Microsoft.VisualBasic两个命名空间。随后程序使用以下代码来生成实际参与编辑

6、的脚本代码文本://生成编译用的完整的VB源代码stringModuleName="mdlXVBAScriptEngine";stringnsName="NameSpaceXVBAScriptEngien";System.Text.StringBuildermySource=newSystem.Text.StringBuilder();mySource.Append("OptionStrictOff");foreach(stringimportinthis.mySourceImports){mySource.Append("rImports"

7、+import);}mySource.Append("rNamespace"+nsName);mySource.Append("rModule"+ModuleName);mySource.Append("r");mySource.Append(this.strScriptText);mySource.Append("rEndModule");mySource.Append("rEndNamespace");stringstrRuntimeSource=mySource.ToString();16.2.2编译脚本2.编译

8、脚本程序生成完整的VB.NET脚本代码文本后就可以编译了,为了提高效率,这里定义了一个静态myAssemblies的哈希列

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。