日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

如何用C#动态编译、执行代码

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何用C#动态编译、执行代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 在開始之前,先熟悉幾個類及部分屬性、方法:CSharpCodeProviderICodeCompilerCompilerParametersCompilerResultsAssembly

  一、CSharpCodeProvider
    提供對C#代碼生成器和代碼編譯器的實例的訪問。如果要動態生成VB代碼,可以使用VBCodeProvider

    CreateCompiler():獲取編譯器的實例。

  二、ICodeCompiler
    定義用于調用源代碼編譯的接口或使用指定編譯器的CodeDOM樹。每種編譯方法都接受指示編譯器的CompilerParameters對象,并返回指示編譯結果的CompilerResults對象。

    CompilerAssemblyFromSource(CompilerParameters option, string source):使用指定的編譯器,從包含源代碼的字符串設置編譯程序集。

  三、CompilerParameters
    
表示用于調用編譯器的參數。

    ReferencedAssemblies:獲取當前項目所引用的程序集。Add方法為程序集添加引用。
    GenerateExecutable:獲取或設置一個值,該值指示是否生成可執行文件。若此屬性為false,則生成DLL,默認是false。
    GenerateInMemory:獲取或設置一個值,該值指示是否在內存中生成輸出。

  四、CompilerResults
    表示從編譯器返回的編譯結果。

    CompiledAssembly:獲取或設置以編譯的程序集,Assembly類型。

  五、Assembly
    就是程序集了(不知道如何描述了)。

  大致了解了以上知識之后,就可以使用C#動態的編譯并執行代碼了,一下是一段示例程序:

  1. using?System;?
  2. using?System.Reflection;?
  3. using?System.Globalization;?
  4. using?Microsoft.CSharp;
  5. using?System.CodeDom;?
  6. using?System.CodeDom.Compiler;
  7. using?System.Text;?
  8. namespace?ConsoleApplication1?
  9. {
  10. ????public?class?Program
  11. ????{
  12. ????????static?void?Main(string[]?args)
  13. ????????{
  14. ????????????//?1.CSharpCodePrivoder
  15. ????????????CSharpCodeProvider?objCSharpCodePrivoder?=?new?CSharpCodeProvider();
  16. ????????????//?2.ICodeComplier
  17. ????????????ICodeCompiler?objICodeCompiler?=?objCSharpCodePrivoder.CreateCompiler();
  18. ????????????//?3.CompilerParameters
  19. ????????????CompilerParameters?objCompilerParameters?=?new?CompilerParameters();
  20. ????????????objCompilerParameters.ReferencedAssemblies.Add("System.dll");
  21. ????????????objCompilerParameters.GenerateExecutable?=?false;
  22. ????????????objCompilerParameters.GenerateInMemory?=?true;
  23. ????????????//?4.CompilerResults
  24. ????????????CompilerResults?cr?=?objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters,?GenerateCode());
  25. ????????????if?(cr.Errors.HasErrors)
  26. ????????????{
  27. ????????????????Console.WriteLine("編譯錯誤:");
  28. ????????????????foreach?(CompilerError?err?in?cr.Errors)
  29. ????????????????{
  30. ????????????????????Console.WriteLine(err.ErrorText);
  31. ????????????????}
  32. ????????????}
  33. ????????????else
  34. ????????????{
  35. ????????????????//?通過反射,調用HelloWorld的實例
  36. ????????????????Assembly?objAssembly?=?cr.CompiledAssembly;
  37. ????????????????object?objHelloWorld?=?objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");
  38. ????????????????MethodInfo?objMI?=?objHelloWorld.GetType().GetMethod("OutPut");
  39. ????????????????Console.WriteLine(objMI.Invoke(objHelloWorld,?null));
  40. ????????????}
  41. ????????????Console.ReadLine();
  42. ????????}
  43. ????????static?string?GenerateCode()
  44. ????????{
  45. ????????????StringBuilder?sb?=?new?StringBuilder();
  46. ????????????sb.Append("using?System;");
  47. ????????????sb.Append(Environment.NewLine);
  48. ????????????sb.Append("namespace?DynamicCodeGenerate");
  49. ????????????sb.Append(Environment.NewLine);
  50. ????????????sb.Append("{");
  51. ????????????sb.Append(Environment.NewLine);
  52. ????????????sb.Append("????public?class?HelloWorld");
  53. ????????????sb.Append(Environment.NewLine);
  54. ????????????sb.Append("????{");
  55. ????????????sb.Append(Environment.NewLine);
  56. ????????????sb.Append("????????public?string?OutPut()");
  57. ????????????sb.Append(Environment.NewLine);
  58. ????????????sb.Append("????????{");
  59. ????????????sb.Append(Environment.NewLine);
  60. ????????????sb.Append("?????????????return?/"Hello?world!/";");
  61. ????????????sb.Append(Environment.NewLine);
  62. ????????????sb.Append("????????}");
  63. ????????????sb.Append(Environment.NewLine);
  64. ????????????sb.Append("????}");
  65. ????????????sb.Append(Environment.NewLine);
  66. ????????????sb.Append("}");
  67. ????????????string?code?=?sb.ToString();
  68. ????????????Console.WriteLine(code);
  69. ????????????Console.WriteLine();
  70. ????????????return?code;
  71. ????????}
  72. ????}
  73. }

總結

以上是生活随笔為你收集整理的如何用C#动态编译、执行代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本裸体xx少妇18在线 | 成人av在线网址 | 久久免费在线 | 综合激情五月婷婷 | 在线不卡免费av | 91视频在线观看视频 | 日韩欧美在线一区 | 日韩欧美性视频 | 不卡的在线视频 | 久久夜靖品2区 | 国产99久久九九精品无码免费 | 一区二区三区四区中文字幕 | 2017天天干 | 日韩v在线 | 国产精品欧美一区二区三区 | 欧美视频在线观看一区二区三区 | 美女在线免费视频 | xxxx 国产| 91成人免费版 | 精品久久久久久久久久久久久久 | 日韩精品电影一区二区 | 国产盗摄视频在线观看 | 国产精品视频专区 | 日本啪啪网 | 日韩在线观看 | 欧美中文字幕视频 | 在线观看一区视频 | 亚洲 小说区 图片区 都市 | 麻豆国产一区二区 | 黄wwwww| 国产精品99精品无码视 | 人妻少妇被猛烈进入中文字幕 | 久久人人爱 | 国产成人综合av | 伊人69| 日韩色在线观看 | 日本在线高清 | 吻胸摸激情床激烈视频大胸 | 国产黑丝av| 大吊av| 精品人妻天天爽夜夜爽视频 | 一区二区三区四区精品 | 不卡日本| 青青草国产一区二区三区 | 免费在线观看高清影视网站 | 国产乱人对白 | 538任你躁在线精品免费 | 亚洲国产免费 | 男人狂揉女人下部视频 | 狠狠干影视 | 亚洲精品小视频 | 一本色道久久88亚洲精品综合 | 娇妻之欲海泛舟无弹窗笔趣阁 | 欲色视频 | 欧美爱爱网 | 久久久久久国产精品 | 广州毛片 | 人人插人人爽 | 少妇把腿扒开让我舔18 | 第一毛片 | 亚洲制服丝袜av | 在线看片中文字幕 | 国产成人77亚洲精品www | 国产男同gay网站 | 成年人看的视频网站 | 亚洲人妖在线 | 精品人妻伦一二三区久久 | 伊人22| 亚洲 欧美 自拍偷拍 | 中国无码人妻丰满熟妇啪啪软件 | 天堂网2014av| 四川黄色一级片 | 日韩精品中文字幕一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩欧美视频在线免费观看 | 巨乳美女在线 | 国产一级二级三级在线 | 亚洲精品中文字幕乱码三区 | 91福利视频免费观看 | 91亚洲国产成人久久精品网站 | 91香蕉国产 | 国产日韩视频在线 | 中文字幕日韩精品在线 | 97国产精品人人爽人人做 | 生活片av | 蜜桃精品在线观看 | 久久色在线观看 | jizz性欧美17 | 国产裸体永久免费视频网站 | 人与动物毛片 | 91视频看| 三度诱惑免费版电影在线观看 | 日韩123| 久久久高潮| 久久永久视频 | 波多在线播放 | 国产精品免费无码 | 欧美黑人狂野猛交老妇 | av收藏小四郎最新地址 |