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

 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. 1z0-052 q209_10

    10: A user, who is authenticated externally, logs in to a remote machine and connects to the databas ...

  2. jquery局部打印插件使用

    基于jquery库的jquery.PrintArea.js插件源代码为: (function ($) { var printAreaCount = 0; $.fn.printArea = functi ...

  3. windows 配置ftp server

  4. centos7 开启ftp服务

    1.关闭默认防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewa ...

  5. eclipse cdt Program "make" not found in PATH

    eclipse cdt插件,开发c/c++程序,编译时报错Program "make" not found in PATH经查C:\MinGW\bin下确实无make.exe,有m ...

  6. HDUOJ------2398Savings Account

    Savings Account Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. Redis客户端

    1.自带的: Redis-cli 2.redis-desktop-manager-0.7.9.809  是一个图形化客户端 但是不支持集群  **由于linux防火墙默认开启,redis的服务端口63 ...

  8. ListView回收机制相关分析

    最初的分析文档为word,该文档是直接从word文档发布,布局未做详细调整,凑合看吧. 所用源码版本为最新的Android 4.4.2(API 19).更新中…… ListView回收机制相关分析   ...

  9. configure: error: png.h not found.

    PHP的时候提示这个错误 configure: error: png.h not found.,这个是选择安装GD模块才会出现的错误,详细错误信息如下 If configure fails try - ...

  10. 文件的内核结构file和dup实现重定向

    一.打开文件内核数据结构 1.一个进程打开两个文件 文件状态标志:读.写.追加.同步.非阻塞等 2.一个进程两次打开同一文件 3.两个进程打开同一文件 示例程序:  C++ Code  1 2 3 4 ...