- 8
- 0
- 约7.38千字
- 约 5页
- 2016-02-25 发布于江苏
- 举报
如何在.NET中实现脚本引擎(CodeDom篇).doc
如何在.NET中实现脚本引擎(CodeDom篇)
.NET 本身提供了强大的脚本引擎,可以直接使用.NET CLR的任何编程语言作为脚本语言,如VB.NET、C#、JScript, J#等等。使用脚本引擎,我们可以动态生成任意表达式、或动态导入任意脚本文件,并在任意时候执行。经实践发现,我们可以使用至少两种不同的方式在.NET中使用脚本引擎:VsaEngine和CodeDom。其实,CodeDom不能算是真正的脚本引擎,它实际上是编译器。但是我们完全可以利用CodeDom来模拟脚本引擎。使用Emit方法也能达到动态生成可执行代码的目的,而且Emit生成的代码不需要编译,因此速度更快。但是Emit插入的实际上是汇编代码,不能算是脚本语言。本文介绍如何以CodeDom方式来动态生成可执行代码。1.?构造一个编译器设置编译参数编译参数需要在CompilerParameters设置:CompilerOptions 用于设置编译器命令行参数 IncludeDebugInformation 用于指示是否在内存在生成Assembly GenerateInMemory 用于指示是否在内存在生成Assembly GenerateExecutable 用于指示生成的Assembly类型是exe还是dll OutputAssembly 用于指示生成的程序文件名(仅在GenerateInMemory为false的情况) ReferencedAssemblies 用于添加引用Assembly
例如:theParameters.ReferencedAssemblies.Add(System.dll);
创建指定语言的编译器编译需要由指定语言的CodeDomProvider生成。这里列举一些.NET的CodeDomProvider:? Microsoft.VisualBasic.VBCodeProvider C# Microsoft.CSharp.CSharpCodeProvider jscript Microsoft.JScript.JScriptCodeProvider J# Microsoft.VJSharp.VJSharpCodeProvider 以C#为例,要创建C#编译器,代码如下:CodeDomProvider theProvider=?(ICodeCompiler)?new?Microsoft.CSharp.CSharpCodeProvider();
下面是完整的创建编译器的例子:?/**////?summary
///?创建相应脚本语言的编译器///?/summary
private?void?createCompiler(string?strLanguage,?bool?debugMode,?string?strAssemblyFileName)
{
??????this.theParameters?=?new?CompilerParameters();
??????this.theParameters.OutputAssembly?=?System.IO.Path.Combine(System.IO.Path.GetTempPath(),?strAssemblyFileName?+?.dll);
??????this.theParameters.GenerateExecutable?=?false;
??????this.theParameters.GenerateInMemory?=?true;
??????if(debugMode)
??????{
???????????this.theParameters.IncludeDebugInformation?=?true;
???????????this.theParameters.CompilerOptions?+=?/define:TRACE=1?/define:DEBUG=1?;
??????}
??????else
??????{
???????????this.theParameters.IncludeDebugInformation?=?false;
???????????this.theParameters.CompilerOptions?+=?/define:TRACE=1?;
??????}
????????????AddReference(System.dll);
????????????AddReference(System.Data.dll);
????????????AddReference(System.Xml.dll);
????????????strLanguage?=?strLanguage.ToLower();
???????
您可能关注的文档
最近下载
- 网络安全知识普及网络安全常识题及参考答案.docx VIP
- 数据资产价值评估博弈模型创新.docx VIP
- 中国竞技麻将比赛规则.doc VIP
- 学堂在线《英美音乐与文化》作业单元考核答案.docx VIP
- 关于校园霸凌的辩论赛.doc VIP
- 小森印刷机L40-PQC控制台使用说明书中文版.pdf VIP
- 2025年浙江省公安机关人民警察特殊职位公务员招录考试(网络安全技术)历年参考题库含答案详解.docx VIP
- 解密山楂炒焦:机理剖析与焦香气味物质基础探究.docx VIP
- 四旋翼无人机设计与制作毕业论文.doc VIP
- 2025年度江西省公安机关人民警察特殊职位招录考试[网络安全]练习题及答案.docx VIP
原创力文档

文档评论(0)