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. tomcat8.5打开manager页面报错的问题

    之前用的8.0版本的tomcat,最近需要将版本升级,当前8的最新的版本是8.5.42,升级之后发现manager页面打不开了,就是下面这个按钮的页面 点击之后报403没权的错误 还是按照8.0版本的 ...

  2. Java入门 异常处理

    Java入门 异常处理 1.处理异常(try-catch以及try-catch-finally): a)try会抛出很多种类型的异常-多重catch块的处理 eg:try{ //一些会抛出异常的方法 ...

  3. java开发技巧

    1,IDEA辅助功能Shift +F2去到有错误的地方Alt+Enter,会给出解决错误的建议: 2,调试,没问题的步骤,直接跳过,不要跳入细节: 调试时,要明确要跟踪的变量,不要陷入混乱: 3,调试 ...

  4. python 获取安装包apk, ipa 信息

    # -*- coding:utf-8 -*- import re import os import zipfile from biplist import * from androguard.core ...

  5. sql 181. 超过经理收入的员工

    Employee 表包含所有员工,他们的经理也属于员工.每个员工都有一个 Id,此外还有一列对应员工的经理的 Id. +----+-------+--------+-----------+| Id | ...

  6. IO框架:asyncio 上篇

    如何定义/创建协程 只要在一个函数前面加上 async 关键字,这个函数对象是一个协程,通过isinstance函数,它确实是Coroutine类型. from collections.abc imp ...

  7. jpa @Query()参数设置,:冒号方式、?NO.问号方式、实体类对象参数设置

    一.service层事务(update/delete) @Transactional(rollbackFor = Exception.class) 二.@Query()参数设置 ?x  和:XX不能混 ...

  8. 一道经典JS面试题

    超过80%的候选人对下面这道JS面试题的回答情况连及格都达不到.这究竟是怎样神奇的一道JS面试题?他考察了候选人的哪些能力?对正在读本文的你有什么启示? 不起眼的开始 招聘前端工程师,尤其是中高级前端 ...

  9. mybatis整合Spring(一)

    DAO层:数据访问层 对远程存储系统做操作的一些程序统一放在DAO层 DAO层工作演变为:接口设计+SQL编写 DAO拼接等逻辑在Service层完成

  10. AMD 异步模块定义

    1.解决模块加载过慢 2.核心:define函数