日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
簡(jiǎn)單的C#代碼解釋器

1、C#代碼解釋器簡(jiǎn)介

成都創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶(hù)提供超值的營(yíng)銷(xiāo)型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營(yíng)銷(xiāo)型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶(hù)提供了成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

能夠動(dòng)態(tài)執(zhí)行 C#代碼是一件很酷的功能,比如,我們可以在控制臺(tái)中輸入一行 C#代碼,然后程序自動(dòng)編譯并執(zhí)行這一行代碼,將結(jié)果顯示給我們。這差不多就是一個(gè)最簡(jiǎn)單的 C#代碼解釋器了。

動(dòng)態(tài)執(zhí)行 C#代碼又是一件很有用的功能,比如,我們可以將某些代碼寫(xiě)在某個(gè)文件之中,由程序集在執(zhí)行時(shí)進(jìn)行加載,改變這些代碼不用中止程序,當(dāng)程序再次加載這些代碼時(shí),就自動(dòng)執(zhí)行的是新代碼了。

2、簡(jiǎn)單的 C#代碼解釋器

 
 
 
  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Reflection;
  4. usingSystem.Globalization;
  5. usingMicrosoft.CSharp;
  6. usingSystem.CodeDom;
  7. usingSystem.CodeDom.Compiler;
  8. usingSystem.Text;
  9. usingSystem.IO;
  10. usingSystem.Xml;
  11. namespaceTest
  12. {
  13. classProgram
  14. {
  15. staticvoidMain(string[]args)
  16. {
  17. Console.Write(">>");
  18. Stringcmd;
  19. Contextcxt=newContext();
  20. while((cmd=Console.ReadLine().Trim())!="exit")
  21. {
  22. if(!String.IsNullOrEmpty(cmd))
  23. {
  24. Console.WriteLine();
  25. cxt.Invoke(cmd);
  26. }
  27. Console.Write("\n>>");
  28. }
  29. }
  30. }
  31. publicclassContext
  32. {
  33. publicCSharpCodeProviderCodeProvider{get;set;}
  34. publicIDictionary,Assembly>Assemblys{get;set;}
  35. publicContext()
  36. {
  37. CodeProvider=newCSharpCodeProvider(newDictionary,string>()
    {{"CompilerVersion","v3.5"}});
  38. Assemblys=newDictionary,Assembly>();
  39. Assembly[]al=AppDomain.CurrentDomain.GetAssemblies();
  40. foreach(Assemblyainal)
  41. {
  42. AddAssembly(a);
  43. }
  44. AppDomain.CurrentDomain.AssemblyLoad+=newAssemblyLoadEventHandler
    (CurrentDomain_AssemblyLoad);
  45. }
  46. privatevoidAddAssembly(Assemblya)
  47. {
  48. if(a!=null)
  49. {
  50. Assemblys.Add(a.FullName,a);
  51. }
  52. }
  53. voidCurrentDomain_AssemblyLoad(objectsender,AssemblyLoadEventArgsargs)
  54. {
  55. Assemblya=args.LoadedAssembly;
  56. if(!Assemblys.ContainsKey(a.FullName))
  57. {
  58. AddAssembly(a);
  59. }
  60. }
  61. publicCompilerParametersCreateCompilerParameters()
  62. {
  63. CompilerParameterscp=newCompilerParameters();
  64. cp.GenerateExecutable=false;
  65. cp.GenerateInMemory=true;
  66. if(Assemblys!=null)
  67. {
  68. foreach(AssemblyainAssemblys.Values)
  69. {
  70. cp.ReferencedAssemblies.Add(a.Location);
  71. }
  72. }
  73. returncp;
  74. }
  75. publicvoidInvoke(Stringcmd)
  76. {
  77. StringinputCmdString=cmd.Trim();
  78. if(String.IsNullOrEmpty(inputCmdString))return;
  79. StringfullCmd=BuildFullCmd(inputCmdString);
  80. CompilerResultscr=CodeProvider.CompileAssemblyFromSource
    (CreateCompilerParameters(),fullCmd);
  81. if(cr.Errors.HasErrors)
  82. {
  83. BooleanrecompileSwitch=true;
  84. foreach(CompilerErrorerrincr.Errors)
  85. {
  86. //CS0201:Onlyassignment,call,increment,decrement,andnewobjectexpressionscanbe
  87. //usedasastatement
  88. if(!err.ErrorNumber.Equals("CS0201"))
  89. {
  90. recompileSwitch=false;
  91. break;
  92. }
  93. }
  94. //重新編譯
  95. if(recompileSwitch)
  96. {
  97. StringdynaName="TempArg_Dynamic_"+DateTime.Now.Ticks.ToString();
  98. inputCmdString=String.Format("var{0}=",dynaName)+inputCmdString;
  99. inputCmdString+=";\nSystem.Console.WriteLine("+dynaName+");";
  100. fullCmd=BuildFullCmd(inputCmdString);
  101. cr=CodeProvider.CompileAssemblyFromSource(CreateCompilerParameters(),fullCmd);
  102. }
  103. if(cr.Errors.HasErrors)
  104. {
  105. Console.WriteLine("編譯錯(cuò)誤:");
  106. foreach(CompilerErrorerrincr.Errors)
  107. {
  108. Console.WriteLine(err.ErrorNumber);
  109. Console.WriteLine(err.ErrorText);
  110. }
  111. return;
  112. }
  113. }
  114. Assemblyassem=cr.CompiledAssembly;
  115. ObjectdynamicObject=assem.CreateInstance("Test.DynamicClass");
  116. Typet=assem.GetType("Test.DynamicClass");
  117. MethodInfominfo=t.GetMethod("MethodInstance");
  118. minfo.Invoke(dynamicObject,null);
  119. }
  120. privateStringBuildFullCmd(StringinputCmdString)
  121. {
  122. StringStringfullCmd=String.Empty;
  123. fullCmd+=@"
  124. namespaceTest
  125. {
  126. publicclassDynamicClass
  127. {
  128. publicvoidMethodInstance()
  129. {
  130. "+inputCmdString+@";
  131. }
  132. }
  133. }";
  134. returnfullCmd;
  135. }
  136. }
  137. }

當(dāng)前題目:簡(jiǎn)單的C#代碼解釋器
地址分享:http://www.5511xx.com/article/ccsjhgs.html