简单实现C#代码解释器.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简单实现C#代码解释器

简单的C#代码解释器 1、C#代码解释器简介 能够动态执行 C#代码是一件很酷的功能,比如,我们可以在控制台中输入一行 C#代码,然后程序自动编译并执行这一行代码,将结果显示给我们。这差不多就是一个最简单的 C#代码解释器了。 动态执行 C#代码又是一件很有用的功能,比如,我们可以将某些代码写在某个文件之中,由程序集在执行时进行加载,改变这些代码不用中止程序,当程序再次加载这些代码时,就自动执行的是新代码了。 2、简单的 C#代码解释器 usingSystem; ? usingSystem.Collections.Generic; ? usingSystem.Reflection; ? usingSystem.Globalization; ? usingMicrosoft.CSharp; ? usingSystem.CodeDom; ? usingSystem.CodeDom.Compiler; ? usingSystem.Text; ? usingSystem.IO; ? usingSystem.Xml; ? ? namespaceTest ? { ? classProgram ? { ? staticvoidMain(string[]args) ? { ? Console.Write(); ? Stringcmd; ? Contextcxt=newContext(); ? while((cmd=Console.ReadLine().Trim())!=exit) ? { ? if(!String.IsNullOrEmpty(cmd)) ? { ? Console.WriteLine(); ? cxt.Invoke(cmd); ? } ? Console.Write(\n); ? } ? } ? } ? ? publicclassContext ? { ? publicCSharpCodeProviderCodeProvider{get;set;} ? publicIDictionaryString,AssemblyAssemblys{get;set;} ? ? publicContext() ? { ? CodeProvider=newCSharpCodeProvider(newDictionarystring,string() {{CompilerVersion,v3.5}}); ? Assemblys=newDictionaryString,Assembly(); ? Assembly[]al=AppDomain.CurrentDomain.GetAssemblies(); ? foreach(Assemblyainal) ? { ? AddAssembly(a); ? } ? AppDomain.CurrentDomain.AssemblyLoad+=newAssemblyLoadEventHandler (CurrentDomain_AssemblyLoad); ? } ? ? privatevoidAddAssembly(Assemblya) ? { ? if(a!=null) ? { ? Assemblys.Add(a.FullName,a); ? } ? } ? ? voidCurrentDomain_AssemblyLoad(objectsender,AssemblyLoadEventArgsargs) ? { ? Assemblya=args.LoadedAssembly; ? if(!Assemblys.ContainsKey(a.FullName)) ? { ? AddAssembly(a); ? } ? } ? ? publicCompilerParametersCreateCompilerParameters() ? { ? CompilerParameterscp=newCompilerParameters(); ? cp.GenerateExecutable=false; ? cp.GenerateInMemory=true; ? if(Assemblys!=null) ? { ? foreach(AssemblyainAssemblys.Values) ? { ? cp.ReferencedAssemblies.Add(a.Location); ? } ? } ? returncp; ? } ? ? publicvoidInvoke(Stringcmd) ? { ? StringinputCmdString=cmd.Trim(); ? if(String.IsNullOrEmpty(inputCmdString))return; ? ? StringfullCmd=BuildFullCmd(i

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档