1.使用c#动态编译,可参考如下:

//生成c#代码
string code = GenerateCode();
CodeDomProvider cdp = CodeDomProvider.CreateProvider("C#"); // 编译器的参数
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add(typeof(T).Assembly.Location);
cp.ReferencedAssemblies.Add("System.Core.dll");//添加引用
foreach (var ass in typeof(T).Assembly.GetReferencedAssemblies())
{
if (ass.Name != "System.Core")
{
var refAss = AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(assembly => assembly.GetName().Name == ass.Name);
if (refAss != null)
cp.ReferencedAssemblies.Add(refAss.Location);
}
}
//GenerateExecutable是设置编译后生成的是dll还是exe,true是dll,false是exe,默认是生成dll的
cp.GenerateExecutable = false;
//对于GenerateInMemory这个属性,MSDN上说的是true就把编译的生成的程序集保留在内存中,
//通过CompilerResults实例的CompiledAssembly可以获取。如果设为false则是生成文件保存在磁盘上,
//通过CompilerResults实例的PathToAssembly实例获取程序集的路径。事实是,无论GenerateInMemory设置哪个值,
//都会在硬盘上生成相应的文件,区别在于OutputAssembly设置了相应的文件名的话,生成的文件会存在指定路径上,
//否则会存放在系统的临时文件夹里面
cp.GenerateInMemory = true;
//此处如果不加,在某些情况下,默认生成的cp.TempFiles.BasePath=C:\Users\Administrator\AppData\Local\Temp\2\j2uudvfi,而不是
//cp.TempFiles.BasePath=C:\Users\Administrator\AppData\Local\Temp\j2uudvfi,由于\2这一层级的文件夹未创建,导致抛出
//"未能找到路径……的一部分"的异常,此处初始化一下cp.TempFiles,则可避免此问题
cp.TempFiles = new TempFileCollection(System.IO.Path.GetTempPath());
CompilerResults cr = cdp.CompileAssemblyFromSource(cp, code); //动态编译出错时
if (cr.Errors.HasErrors)
{
Exception ex = new Exception();
ex.Data["code"] = code;
throw ex;
}
else
{
// 编译后的程序集
Assembly ass = cr.CompiledAssembly;
//Namespace是命名空间,Class是类名,赋值为需要的
Type type = ass.GetType(string.Format("{0}.{1}", Namespace, Class));
MethodInfo objectToString = type.GetMethod("ObjectToString");
//动态执行的方法
structToStringExecutor = new DynamicMethodExecutor(objectToString);
}

c# 动态编译CodeDomProvider.CompileAssemblyFromSource(CompilerParameters cp,string code)的更多相关文章

  1. 分享基于.NET动态编译&Newtonsoft.Json封装实现JSON转换器(JsonConverter)原理及JSON操作技巧

    看文章标题就知道,本文的主题就是关于JSON,JSON转换器(JsonConverter)具有将C#定义的类源代码直接转换成对应的JSON字符串,以及将JSON字符串转换成对应的C#定义的类源代码,而 ...

  2. 重写代码生成器支持模板(多层架构,MVC),多语言c#,java;支持mysql和sqlserver,动态编译

    多年前用过李天平前辈的,自己改过,后来李老师做动软了,不给源码,修改不是很方便.加上我目前需要转java方向,于是决定自己搞.到目前为止花了整整一个星期了,看看目前的成果. 最后是代码工程文件,用c# ...

  3. .net 动态编译解决考勤计算问题

    由于公司实施SAP HR项目,但是SAP HR对考勤功能真的太弱化了,直接从考勤机上读取的原始打卡记录不能直接传输到HR系统里面,因为SAP HR不能识别那些多余的打卡记录,而且必须把打卡记录进行成组 ...

  4. 【.net 深呼吸】细说CodeDom(9):动态编译

    知道了如果构建代码文档,知道了如何生成代码,那么编译程序集就很简单了. CodeDomProvider 类提供了三个可以执行编译的方法: 1.CompileAssemblyFromSource——这个 ...

  5. C# 动态类型与动态编译简介

    关于C#的动态类型与动态编译的简介,主要是一个Demo. 动态类型 关键字: dynamic 这里有详细的介绍:[C#基础知识系列]专题十七:深入理解动态类型 动态类型的应用场景 可以减少强制转换(强 ...

  6. [Unity] 编辑器运行中动态编译执行C#代码

    (一)问题 之前写Lua时,修改完代码 reload 就可以热重载代码,调试起来十分方便(重构则十分痛苦). 现在使用 C# 做开发,目前还没找到比较方便地进行热重载的方式.只能退而求其次,在调试上找 ...

  7. c#动态编译并动态生成dll

    /// <summary> /// 动态编译并执行代码 /// </summary> /// <param name="code">代码< ...

  8. .NET中的动态编译

    代码的动态编译并执行是一个.NET平台提供给我们的很强大的工具用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外 ...

  9. C#动态编译代码,执行一个代码片段,或者从指定文件中加载某个接口的实现类

    在项目进行中有时候会需要配置一些复杂的表达式,在程序运行的时候执行表达式,根据结果执行相应的操作,简单写了一个类Expression,利用.net的动态编译技术实现,代码如下: public clas ...

随机推荐

  1. 十二,k8s集群访问控制之RBAC授权

    目录 角色访问控制RBAC (Role-Based Access Control) 常用的授权插件: RBAC控制: role 和 clusterrole rolebinding 和 clusterr ...

  2. MySQL查询数据库中所有数据表的数据条数

    select table_name,table_rows from information_schema.tables where TABLE_SCHEMA = '数据库名称' order by ta ...

  3. python中_、__、__xx__(单下划线、双下划线等)的含义

    (1)_xxx "单下划线 " 开始的成员变量相当于私有变量,也叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问(可以定义有点像java中的ge ...

  4. ajax 向php发送请求

    <html> <head> <script src="clienthint.js"></script> </head> ...

  5. 从二叉查找树到平衡树:avl, 2-3树,左倾红黑树(含实现代码),传统红黑树

    参考:自平衡二叉查找树 ,红黑树, 算法:理解红黑树 (英文pdf:红黑树) 目录 自平衡二叉树介绍 avl树 2-3树 LLRBT(Left-leaning red-black tree左倾红黑树 ...

  6. Hadoop-No.5之压缩

    Hadoop存储数据时需要着重考虑的一个因素就是压缩.这里不仅要满足节省存储空间的需求,也要提升数据处理性能.在处理大量数据时,消耗最大的是磁盘和网络的I/O,所以减少需要读取或者写入磁盘的数据量就能 ...

  7. 关于 keepalived+lvs 中参数 persistence_timeout 的说明

    在keepalived+lvs的配置文件keepalived.conf中有一个选项persistence_timeout 该选项的作用:在一定时间内使来自于同一个Client的所有TCP请求被负载到同 ...

  8. [学习笔记] 平衡树——Treap

    前置技能:平衡树前传:BST 终于学到我们喜闻乐见的平衡树啦! 所以我们这次讲的是平衡树中比较好写的\(Treap\). (以后会写splay的先埋个坑在这) 好了,进入正题. step 1 我们知道 ...

  9. SQL Server、SSMS的单独安装

    喜欢尝新版本的,可以单独安装数据库.界面管理软件. 不喜欢折腾的可以只安装SQL Server(全选安装,自带界面管理工具) 1.SQL Server,下载地址https://www.microsof ...

  10. JVM(二),Java怎样实现一次编译到处运行(平台无关性)

    二.Java怎样实现一次编译到处运行(平台无关性) 1.java平台无关性原理 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Jav ...