成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡單介紹編譯C#代碼

開發 后端
本文介紹編譯C#代碼,主要使用命名空間 Microsoft.CSharp 編譯C#代碼,然后使用 CodeDom 和 反射調用,我這里寫了一個測試工具

編譯C#代碼應用場景:
還沒想出來會用到哪里。動態的代碼由誰來寫?普通用戶我想有一定的困難。特別是有了像 IronPython 這樣更容易使用的動態嵌入腳本。
1) 像 LINQPad 這樣的輔助開發工具
2) 實現腳本引擎?
3) 探討...

主要使用命名空間 Microsoft.CSharp 編譯C#代碼,然后使用 CodeDom 和 反射調用,我這里寫了一個測試工具,看代碼:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Drawing;  
  5. using System.Windows.Forms;  
  6. using System.CodeDom.Compiler;  
  7. using Microsoft.CSharp;         // 用于編譯C#代碼    
  8. using System.Reflection;        // 用于反射調用   
  9. namespace CodeDomLearn  
  10. {  
  11. public partial class Form1 : Form  
  12. {  
  13. public Form1() {  
  14. InitializeComponent();  
  15.  
  16. }  
  17.  
  18. private void button1_Click(object sender, EventArgs e) {  
  19. CodeCompiler.Compile(new string[] { }, textBox1.Text, "");  
  20. listBox1.Items.Clear();  
  21. foreach (string s in CodeCompiler.ErrorMessage) {  
  22. listBox1.Items.Add(s);  
  23. }  
  24. listBox1.Items.Add(CodeCompiler.Message);  
  25. }  
  26. }  
  27.  
  28. static class CodeCompiler {  
  29. static public string Message;  
  30. static public List<string> ErrorMessage = new List<string>();  
  31.  
  32. public static bool Compile
    (string[] references, string source, string outputfile) {  
  33. // 編譯參數    
  34. CompilerParameters param = new CompilerParameters
    (references, outputfile, true);  
  35. param.TreatWarningsAsErrors = false;  
  36. param.GenerateExecutable = false;  
  37. param.IncludeDebugInformation = true;  
  38.  
  39. // 編譯    
  40. CSharpCodeProvider provider = new CSharpCodeProvider();  
  41. CompilerResults result = provider.CompileAssemblyFromSource
    (param, new string[] { source });  
  42.  
  43. Message = "";  
  44. ErrorMessage.Clear();  
  45. if (!result.Errors.HasErrors) { // 反射調用    
  46. Type t = result.CompiledAssembly.GetType("MyClass");  
  47. if (t != null) {  
  48. object o = result.CompiledAssembly.CreateInstance("MyClass");  
  49. Message = (string)t.InvokeMember("GetResult", BindingFlags.Instance | 
    BindingFlags.InvokeMethod | BindingFlags.Public, null, o, null);  
  50. }  
  51. return true;  
  52. }  
  53.  
  54. foreach (CompilerError error in result.Errors) {  // 列出編譯錯誤  
  55. if (error.IsWarning) continue;  
  56. ErrorMessage.Add("Error(" + error.ErrorNumber + ") - " + error.ErrorText + 
    "\t\tLine:" + error.Line.ToString() + "  Column:"+error.Column.ToString());  
  57. }  
  58. return false;  
  59. }  
  60.  
  61. }  

作為演示,例子簡單的規定類名必須是MyClass,必須有一個方法返回 string 類型的 GetResult 方法。以上介紹編譯C#代碼

【編輯推薦】

  1. C#反射方法學習總結
  2. 淺談C#測量cpu性能
  3. C#遠程計算機的一些理論知識
  4. 淺析C# Static修飾
  5. C#轉換農歷的簡單方法
責任編輯:佚名 來源: Infoq
相關推薦

2009-09-01 10:35:19

C# 3.0編譯器

2009-08-31 18:24:26

編譯C#文件

2009-08-27 16:29:18

C#動態編譯

2009-09-03 09:40:57

C#創建表單

2009-08-06 18:15:13

C# SQL Serv

2009-09-01 16:19:57

C# new()約束

2009-08-20 16:25:59

C# 匿名方法

2009-08-25 13:38:35

C# Timer組件

2009-08-07 17:12:07

C# DLL函數

2009-08-03 17:51:43

C#引用類型

2009-08-14 16:46:44

C#元數據

2009-08-21 17:55:52

C#復合控件

2009-08-27 10:19:22

C#匿名類型

2009-08-07 17:41:40

C#預處理

2009-08-18 17:37:57

C#固定指針

2009-08-10 16:19:37

C#冒泡排序

2009-08-14 17:27:56

C#方法參數

2009-08-06 14:53:41

C# User類

2009-08-25 14:42:41

由C++轉向C#

2009-08-06 14:59:36

C#編譯器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情欧美激情在线五月 | 在线观看涩涩视频 | 欧美久久久网站 | 91免费版在线观看 | av在线免费观看网站 | 国产精品亚洲一区二区三区在线观看 | 欧美日韩综合一区 | 亚洲97 | 日韩精品一区二区三区中文在线 | 亚洲综合视频 | 国产精品自在线 | 91资源在线| 九色在线| 国产日韩精品在线 | 午夜精品福利视频 | 18成人在线观看 | 盗摄精品av一区二区三区 | 中文字幕一区二区三区不卡 | 欧美性大战xxxxx久久久 | 久久综合婷婷 | 最新国产精品 | 亚洲欧洲精品一区 | 在线a视频 | 国产视频久久久 | 欧洲尺码日本国产精品 | 国外成人免费视频 | 91欧美激情一区二区三区成人 | 一区二区三区中文字幕 | 亚洲在线日韩 | 91一区二区三区 | 黑人中文字幕一区二区三区 | 性高湖久久久久久久久 | 九九精品在线 | 国产一区二区三区在线 | 精品国产1区2区3区 一区二区手机在线 | 成人精品免费视频 | 一区二区在线 | 国产做a爱免费视频 | 欧美精品久久久 | 国产伦精品一区二区三区精品视频 | 一级大黄 |