C# 对动态编辑的一些学习笔记
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace CompilerTest
{
// Compiler
class MyCompilter
{
// Provider
private Microsoft.CSharp.CSharpCodeProvider Provider;
// CompilerParameters
private System.CodeDom.Compiler.CompilerParameters cps;
// Default Libs
public string[] defaultLibs = { "System.dll" }; // Singleton
private static MyCompilter instance = null;
private MyCompilter() {
Provider = new Microsoft.CSharp.CSharpCodeProvider();
}
public static MyCompilter Instance() {
if (instance == null) {
instance = new MyCompilter();
}
return instance;
} // CompilerParameters
private void CreateCps(string[] libs) {
// 编译参数
cps = new System.CodeDom.Compiler.CompilerParameters();
// 是否生成 Exe 文件
cps.GenerateExecutable = false;
// 生成在内存中
cps.GenerateInMemory = true;
// 添加引用
cps.ReferencedAssemblies.AddRange(defaultLibs);
if (libs != null) {
cps.ReferencedAssemblies.AddRange(libs);
} // 将 生成的 的 Dll 文件,保存到硬盘中
cps.OutputAssembly = "d:/tmp.dll";
} // Eval String
public System.Reflection.Assembly Compile(string[] Sources, string[] libs = null) {
// Compiler Results
System.CodeDom.Compiler.CompilerResults cr;
// Create Compiler Parameters
CreateCps(libs);
// 开始编译
cr = Provider.CompileAssemblyFromSource(cps, Sources); // 如果没有错误的话. 将 生成的 Assembly 返回
if (cr.Errors.Count == ) {
return cr.CompiledAssembly;
}
return null;
}
} class Program
{
static void Main(string[] args) {
string code = @"
using System; class ExpressionCalculate
{
public void Calculate()
{
Console.WriteLine(""kaoooooo,asdfl"");
}
}
";
string code2 = @"
using System; class ExpressionCalculate2
{
public void Calculate2()
{
Console.WriteLine(""kaooortrtrtrtooo,atytytysdfl"");
}
}
"; // 对字符串,进行编译
System.Reflection.Assembly type = MyCompilter.Instance().Compile(new string[] { code,code2 });
// 通过,编译后得到的 Assembly 反射创建其中的一个类,得到一个 Object 类型的对象
object obj = type.CreateInstance("ExpressionCalculate2");
// 通过 这个 Obj 的 GetType().GetMethod() 方法 按名称得到它的里面的方法
System.Reflection.MethodInfo method = obj.GetType().GetMethod("Calculate2");
// 调用这个方法
method.Invoke(obj, null);
}
}
}
C# 对动态编辑的一些学习笔记的更多相关文章
- 在MVC中使用dotless后台动态解析LESSCSS的学习笔记
通过学习LessCSS,我们知道,Less是需要通过编译才能生成 .css 文件,主要使用三种方式进行编译: 1)使用第三方编译工具,在项目发布前编译好放在项目中. 2)在浏览器端解析执行,需要引用 ...
- 动态样式语言Less学习笔记
介绍资料参见:http://www.bootcss.com/p/lesscss/ LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. LESS 既可以在 客户端 上运行 (支 ...
- AVAWEB学习笔记 ---- 系列文章
[JAVAWEB学习笔记]网上商城实战5:后台的功能模块 [JAVAWEB学习笔记]网上商城实战4:订单模块 [JAVAWEB学习笔记]网上商城实战3:购物模块和订单模块 [JAVAWEB学习笔记]网 ...
- [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?
[译]聊聊C#中的泛型的使用(新手勿入) 写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...
- [原创]java WEB学习笔记104:Spring学习---AOP 前奏,通过一个问题引入动态代理
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见
我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置. 一.动态设 ...
- Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色
上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...
- 【Ext.Net学习笔记】06:Ext.Net GridPanel的用法(GridPanel 折叠/展开行、GridPanel Selection、 可编辑的GridPanel)
GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候. 下面来看看效果: 使用行折叠/展开功能之 ...
- KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 《寒江独钓》内核学习笔记(5)
目录 . 相关阅读材料 . <加密与解密3> . [经典文章翻译]A_Crash_Course_on_the_Depths_of_Win32_Structured_Exception_Ha ...
随机推荐
- 图表控件MsChart使用demo
chart 控件主要有 Titles 标题集合 Chart Area图形显示区域 Series图表集合 Legends图列的集合 (1) 常用事件: 1. Series1.Points.DataB ...
- ORACLE DG之参数详解
1.DB_NAME 数据库名字,需要保持同一个Data Guard中所有数据库DB_NAME相同. 主库和备库相同 DB_NAME='chicago' DB_NAME='chicago' 2.DB_U ...
- ios 文件操作
1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...
- JavaScript 组件化开发之路(一)
*:first-child{margin-top: 0 !important}.markdown-body>*:last-child{margin-bottom: 0 !important}.m ...
- Iframe 自适应高度的方法!
第一种方法:代码简单,兼容性还可以,大家可以先测试下. function SetWinHeight(obj) { var win=obj; if (document.getElementById) { ...
- Error (10028): Can't resolve multiple constant drivers for net "out2" at shiyan.v(14)解决办法
//Error(10028):Can't resolve multiple constant drivers for net “ ” at **.v //两个进程里都有同一个条件判断的话,会产生并行信 ...
- 不同系统间传输float型数据
#include <stdio.h> #include <string.h> int main(void) { union result { float d; ...
- PB串口编程资料(转)
----MSCOMM32参数基本介绍2008年03月29日 星期六 上午 11:37MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能.MSComm控件在串口编程时非常方便,程序 ...
- C语言中链表节点的实现,以及如何实现泛型
1.C语言中的struct是纯粹的结构体,没有访问权限的概念 2.C语言中用void* 来实现泛型编程,也是C++类和模板底层实现的基础,就是用void*来实现的 #include<stdio. ...
- php使用循环创建任意长度数组
实例:生成长度为5的偶数集合 <?php /** * [crtArr description] * @param [int] $start [循环开始变量] * @param [int] $le ...