-
使用codedom 编写脚本解释器
本篇博客的目的是为了保存例子,怕自己忘记。
1 private void dd(string code) 2 { 3 string path = "BonkerSpace"; 4 if (File.Exists(path)) 5 { 6 File.Delete(path); 7 } 8 // 创建编译器对象 9 Microsoft.CSharp.CSharpCodeProvider p = new Microsoft.CSharp.CSharpCodeProvider(); 10 //new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); 11 12 // 设置编译参数 13 System.CodeDom.Compiler.CompilerParameters options = new System.CodeDom.Compiler.CompilerParameters(); 14 options.ReferencedAssemblies.Add("System.dll"); 15 options.ReferencedAssemblies.Add("System.Data.dll"); 16 options.ReferencedAssemblies.Add("System.Xml.dll"); 17 options.ReferencedAssemblies.Add("mscorlib.dll"); 18 options.GenerateInMemory = true; 19 options.OutputAssembly = "BonkerSpace"; 20 21 // 开始编译 22 System.CodeDom.CodeSnippetCompileUnit cu = new System.CodeDom.CodeSnippetCompileUnit(code); 23 System.CodeDom.Compiler.CompilerResults cr = p.CompileAssemblyFromDom(options, cu); 24 25 // 执行动态程序集相关内容。 26 Type t = cr.CompiledAssembly.GetType("BonkerSpace.BonkerClass"); 27 object o = cr.CompiledAssembly.CreateInstance("BonkerSpace.BonkerClass"); 28 object result = t.InvokeMember("Bonker", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod, null, o, null); 29 30 this.richTextBox2.Text = result.ToString(); 31 }
这个方法是codedome的解释类。code参数是代码,注意此代码是完整的c#代码
例如你可以这样使用
1 private void button1_Click(object sender, EventArgs e) 2 { 3 try 4 { 5 6 string msg = string.Format(@" 7 using System; 8 using System.Collections.Generic; 9 // using System.ComponentModel; 10 using System.Data; 11 // using System.Drawing; 12 // using System.Linq; 13 //using System.Text; 14 // using System.Windows.Forms; 15 namespace BonkerSpace 16 {{ 17 public class BonkerClass 18 {{ 19 public object Bonker() 20 {{ 21 {0} 22 }} 23 }} 24 }}", this.richTextBox1.Text); 25 dd(msg); 26 } 27 catch (Exception ex) 28 { 29 MessageBox.Show(ex.Message); 30 } 31 32 }
这样就可以了。
demo下载 https://files.cnblogs.com/Bonker/WindowsFormsApplication2.rar
作者:Bonker
出处:http://www.cnblogs.com/Bonker
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数