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 ...
随机推荐
- java-testng-selenium优化
由于项目中webui测试的需要,是用testng+selenium的方式,其中遇到过几个问题,记录下,方便以后查看 1.重复运行多次case 因为是selenium,所以有的时候需要运行多次,方法是写 ...
- WPF控件数据单项绑定
建立一个姓名,年龄输入框,如图: XAML代码: <TextBox Name="txtName" Text="{Binding Name}" ToolTi ...
- rails 学习笔记
bundle package #保存gem到 vendor/cache bundle install –local 从cache从安装 升级rails bundle config –delete ...
- throw和throws
uncheckException的处理 class User{ private int age; public void setAge(int age){ if(age < 0){ //生成异常 ...
- [INS-41112] Specified network interface doesnt maintain connectivi
OS: Oracle Linux Server release 6.3 DB: Oracle 11.2.0.3 安装11.2.0.3.0的RAC,在安装GRID时报错: [INS-41112] Spe ...
- oracle 几个时间函数探究
近来经常用到时间函数,在此写一个笔记,记录自己的所得,希望也对您有所帮助. 1.对于一个时间如 sysdate:2015/1/30 14:16:03如何只得到年月日,同时它的数据类型不变化呢? 最容易 ...
- hdu 5183 Negative and Positive (NP)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5183 Negative and Positive (NP) Description When give ...
- golang构造函数与转换函数
golang的每种类型, 凡是用type定义的类型, 其类型名既是其构造函数,也是其转换函数. 其中,构造函数后眼{...}, 转换函数后跟(...)
- Swift的一些基础内容
//①判断字符串是否为空的方法 isEmpty var str:String = "www.baidu.com" if str.isEmpty { print("空字符串 ...
- MongoDB学习笔记-查询
MongoDB中使用find或findOne函数执行查询 find函数 db.c.find()--查询集合c所有 db.c.find({“name”:”zhangsan”}) 注意:查询条件的值必须是 ...