本篇博客的目的是为了保存例子,怕自己忘记。

 private void dd(string code)
{
string path = "BonkerSpace";
if (File.Exists(path))
{
File.Delete(path);
}
// 创建编译器对象
Microsoft.CSharp.CSharpCodeProvider p = new Microsoft.CSharp.CSharpCodeProvider();
//new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); // 设置编译参数
System.CodeDom.Compiler.CompilerParameters options = new System.CodeDom.Compiler.CompilerParameters();
options.ReferencedAssemblies.Add("System.dll");
options.ReferencedAssemblies.Add("System.Data.dll");
options.ReferencedAssemblies.Add("System.Xml.dll");
options.ReferencedAssemblies.Add("mscorlib.dll");
options.GenerateInMemory = true;
options.OutputAssembly = "BonkerSpace"; // 开始编译
System.CodeDom.CodeSnippetCompileUnit cu = new System.CodeDom.CodeSnippetCompileUnit(code);
System.CodeDom.Compiler.CompilerResults cr = p.CompileAssemblyFromDom(options, cu); // 执行动态程序集相关内容。
Type t = cr.CompiledAssembly.GetType("BonkerSpace.BonkerClass");
object o = cr.CompiledAssembly.CreateInstance("BonkerSpace.BonkerClass");
object result = t.InvokeMember("Bonker", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod, null, o, null); this.richTextBox2.Text = result.ToString();
}

这个方法是codedome的解释类。code参数是代码,注意此代码是完整的c#代码

例如你可以这样使用

 private void button1_Click(object sender, EventArgs e)
{
try
{ string msg = string.Format(@"
using System;
using System.Collections.Generic;
// using System.ComponentModel;
using System.Data;
// using System.Drawing;
// using System.Linq;
//using System.Text;
// using System.Windows.Forms;
namespace BonkerSpace
{{
public class BonkerClass
{{
public object Bonker()
{{
{0}
}}
}}
}}", this.richTextBox1.Text);
dd(msg);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
} }

这样就可以了。

demo下载

使用codedom 编写脚本解释器的更多相关文章

  1. 用 Antlr 重构脚本解释器

    前言 在上一个版本实现的脚本解释器 GScript 中实现了基本的四则运算以及 AST 的生成. 当我准备再新增一个 % 取模的运算符时,会发现工作很繁琐而且几乎都是重复的:主要是两步: 需要在词法解 ...

  2. [译]Godot系列教程四 - 编写脚本

    编写脚本(Scripting) 简介 关于无需编程即可创建视频游戏的那些工具的谈论有很多.不用学习编程知识对很多独立开发者来说就是一个梦想.这种需求 - 游戏开发者.甚至在很多公司内部,希望对游戏流程 ...

  3. 【转】PowerShell入门(十一):编写脚本模块

    转至:http://www.cnblogs.com/ceachy/archive/2013/03/08/PowerShell_Script_Module.html 现在通过编写模块就可以在PowerS ...

  4. [译]Python编写虚拟解释器

    使用Python编写虚拟机解释器 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环 ...

  5. Basic脚本解释器移植到STM32

    本文来自http://blog.csdn.net/hellogv/ .引用必须注明出处! 上次讲了LUA移植到STM32.这次讲讲Basic脚本解释器移植到STM32. 在STM32上跑Basic脚本 ...

  6. Jmeter脚本录制方法(二)——手工编写脚本(jmeter与fiddler结合使用)

    jmeter脚本录制方法可以分三种,前几天写的一篇文章中,已介绍了前两种,今天来说下第三种,手工编写脚本,建议使用这一种方法,虽然写的过程有点繁琐,但调试脚本比前两者方式都要便捷. 首先来看下三种方式 ...

  7. Linux shell编写脚本部署pxe网络装机

    Linux shell编写脚本部署pxe网络装机 人工安装配置,Linux PXE无人值守网络装机  https://www.cnblogs.com/yuzly/p/10582254.html 脚本实 ...

  8. 编写脚本实现DHCP服务与DHCP中继自动化执行

    编写脚本实现DHCP服务与DHCP中继自动化执行 本脚本是在liunx搭建DHCP服务器以及DHCP中继服务器实验环境下实现的https://www.cnblogs.com/yuzly/p/10539 ...

  9. Jmeter脚本录制方法(二)手工编写脚本(jmeter与fiddler结合使用)

    jmeter脚本录制方法可以分三种,前几天写的一篇文章中,已介绍了前两种,今天来说下第三种,手工编写脚本,建议使用这一种方法,虽然写的过程有点繁琐,但调试脚本比前两者方式都要便捷. 首先来看下三种方式 ...

随机推荐

  1. Deep compression code

    https://github.com/songhan/SqueezeNet-Deep-Compression import sys import os import numpy as np impor ...

  2. chrome插件的popup与跨域请求

    chrome插件的popup与跨域请求 tkorays <tkorays@hotmail.com> popup及其它js脚本         在chrome插件开发中,大致有几种类型的js ...

  3. java Socket 获取本地主机ip

    package cn.itcast.net.p1.ip; import java.net.InetAddress;import java.net.UnknownHostException; publi ...

  4. spyder python 相关

    1.python开发集成工具Spyder中,如何设置变量成员提示和代码补全呢? 答: pip install rope,安装好rope 就可以了 2.最常用的是:tap的制动补全 (IPython c ...

  5. python实现的电影票房数据可视化

    代码地址如下:http://www.demodashi.com/demo/14275.html 详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采 ...

  6. Java API 各个包的内容解释

    java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类. java.awt 包含用于创建用户界面和绘制图形图像的所有类. java.awt. ...

  7. vim+xdebug调试PHP

    一.安装xdebug 1.编译安装xdebug,也可以使用pecl install xdebug wget http://xdebug.org/files/xdebug-2.3.2.tgz tar - ...

  8. 百度UEditor富文本编辑器去除过滤div等标签

    将设计排版好的页面html代码上传到数据库,再读取出来的时候发现所有的div都被替换成了p标签. 解决方法: 首先在ueditor.all.js文件内搜索allowDivTransToP,找到如下的代 ...

  9. PMP考试终于结束了。。。

    PMP考试昨天终于结束了,可以好好的先休息下了,先不管成绩了,通过这段时间的学习了解,发现PMP在实际工作中的运用 起的作用还很大,看样子以后要学习的东西还多着呢,先休息一周再说...

  10. Python学习笔记015——文件file的常规操作之三(标准输入输出文件)

    1 标准输入输出文件 在Python中,模块sys中含有标准的输入输出文件 sys.stdin     标准输入方法(一般是键盘) sys.stdout   标准输出方法(到显示器的缓冲输出) sys ...