C#实现动态编译代码
/*------------------------------------------------------------------------------
* Copyright (C) 2013
* 版权所有。
*
* 文件名: Compile.cs
* 功能說明:
*
* 創建人: it_Eric
* 創建時間: 2013/10/25 16:19:52
*
* 修改人:
* 修改說明:
*
*-----------------------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.IO;
using System.Reflection; namespace TestDemo
{
public class Compile
{
private string prefix = "using System;" +
"public static class Driver" +
"{" +
"public static void Run()" +
"{";
private string postfix =
"}" +
"}";
public string CompileAndRun(string input, out bool hasError)
{
hasError = false;
string returnData = null; CompilerResults results = null;
using (var provider = new CSharpCodeProvider())
{
var options = new CompilerParameters();
options.GenerateInMemory = true;
var sb = new StringBuilder();
sb.Append(prefix);
sb.Append(input);
sb.Append(postfix);
results = provider.CompileAssemblyFromSource(options, sb.ToString());
}
if (results.Errors.HasErrors)
{
hasError = true;
var errorMessage = new StringBuilder();
foreach (CompilerError error in results.Errors)
{
errorMessage.AppendFormat("{0}{1}", error.Line, error.ErrorText);
returnData = errorMessage.ToString();
} }
else
{
TextWriter temp = Console.Out;
var writer = new StringWriter();
Console.SetOut(writer);
Type drivertype = results.CompiledAssembly.GetType("Driver");
drivertype.InvokeMember("Run", System.Reflection.BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, null, null); Console.SetOut(temp);
returnData = writer.ToString(); }
return returnData;
} }
}
C#实现动态编译代码的更多相关文章
- C#动态编译代码,执行一个代码片段,或者从指定文件中加载某个接口的实现类
在项目进行中有时候会需要配置一些复杂的表达式,在程序运行的时候执行表达式,根据结果执行相应的操作,简单写了一个类Expression,利用.net的动态编译技术实现,代码如下: public clas ...
- 使用 Roslyn引擎动态编译代码
Roslyn引擎自2014年开源至今这么久,一直没怎么了解过,虽然VS2015早就集成了它. 以前老一套的动态编译方法在 .NET Core中似乎不再支持了,很多方法都是未实现的.下面就介绍如何在.N ...
- 用eval 动态编译代码
eval 有另外一种用法, 其参数是作为一个字串表达式, 而不是代码块.在运行时, 它将字串临时编译成代码并且执行. 这很易用, 但也很危险, 因为有可能会把具有危害性的代码放到字串里. foreac ...
- 让C#语言充当自身脚本!——.NET中的动态编译
原文:让C#语言充当自身脚本!--.NET中的动态编译 代码的动态编译并执行是.NET平台提供给我们的很强大的一个工具,用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码 ...
- 分享基于.NET动态编译&Newtonsoft.Json封装实现JSON转换器(JsonConverter)原理及JSON操作技巧
看文章标题就知道,本文的主题就是关于JSON,JSON转换器(JsonConverter)具有将C#定义的类源代码直接转换成对应的JSON字符串,以及将JSON字符串转换成对应的C#定义的类源代码,而 ...
- .Net 动态编译(c# 脚本)
1 用.NET提供的类动态编译代码字符串,生成DLL存于内存中,加载到程序域 2 用反射的方式调用这个DLL 将要被编译和执行的代码读入并以字符串方式保存声明CSharpCodeProvider对象实 ...
- java动态编译——tools.jar问题
笔者在学习中写了一段简单的动态编译代码,但编译一直无法通过,起初认为受路径中存在汉字影响,修改路径后仍然没有解决.最终定位错误是:Java在进行动态编译的时候需要用到tools.jar资源包,若too ...
- (转载)JAVA动态编译--字节代码的操纵
在一般的Java应用开发过程中,开发人员使用Java的方式比较简单.打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了.这种开发模式背后的过程是:开发人员编写的 ...
- [改善Java代码]慎用动态编译
建议17: 慎用动态编译 //=========这篇博文暂时理解不透......... 动态编译一直是Java的梦想,从Java 6版本它开始支持动态编译了,可以在运行期直接编译.java文件,执行. ...
随机推荐
- android与服务端通讯时使用到的GZIP压缩及解压
为了减小android项目与服务端进行通讯时的数据流量,我们可以使用GZIP对服务端传输的数据进行压缩,在android客户端解压.或在客户端压缩,在服务端解压.代码如下: android客户端的GZ ...
- python处理xls、xlsx格式excle
一.windows下读取xls格式文件,所需模块xlrd.xlw 1.下载安装包 xlrd地址:https://pypi.org/project/xlrd/#files xlwt地址:https:// ...
- TimesTen 应用层数据库缓存学习:4. 仅仅读缓存
在运行本文样例前.首先先运行TimesTen 应用层数据库缓存学习:2. 环境准备中的操作. Read-only Cache Group的概念 仅仅读缓存组例如以下图: 仅仅读缓存组(Read-Onl ...
- JBoss目录结构说明
http://www.blogjava.net/livery/articles/262544.html $JBOSS-HOME/bin: 放置各种脚本文件以及相关文件,包括jb ...
- java读取本地txt文件并插入数据库
package com.cniia.ny.web.control.configManage; import java.io.BufferedReader; import java.io.File; i ...
- Mac下配置Apache,PHP
注:如果觉得终端下编辑太麻烦,也可以直接将文件拖出来手动编辑后在放回原文件夹替换即可 1.启用Apache: 在Mac下打开终端,输入“sudo apachectl start”(不包含引号,下同) ...
- Mac /Ubuntu/Windows 下安装nodejs
Mac If you're using the excellent homebrew package manager, you can install node with one command: b ...
- Linux监控平台搭建
Linux监控平台介绍 zabbix监控介绍 zabbix监控流程图 安装zabbix 准备两台主机: zabbix服务端:192.168.133.88 zabbix客户端:192.168.133.6 ...
- php-fig组织fig-standards的一些标准
参考: http://psr.phphub.org/ https://github.com/php-fig/fig-standards https://github.com/PizzaLiu/PHP- ...
- [k8s]k8s-web-terminal配置使用 & etcdui etcd browser配置 & etcdkeeper3配置
安装kube-dns后,我想看看他是怎么个配置,于是我就找到了这个 参考: https://github.com/beyondblog/k8s-web-terminal cat >> /e ...