C#代码动态编译、动态执行、动态调试

前几天看到一篇关于.net动态编译的文章 .NET中的动态编译 ,很受启发。在 此基础上我做了一些封装,为使调用更加简单,并增加了对动态代码调试的支持 ,相同代码只编译一次的支持,代码改动自动重新编译,代码引用文件的自动加 载和手工加载等功能。

如上图,我封装的类CSharpProvider很简单,下面说明一下一些公共成员 的用法。

公共属性

AssemblyFileName:这个属性指定动态编译后 生成的配件名称。

CompilerParameters:这个属性指定编译的参数

References:这个属性指定被编译代码中的引用。调用者只要调用 References.Add("xxx.dll"),就可以加入自己的引用,对于System命 名空间的所有引用,不需要手工加入,该类会自动加载。对于用户自己的组件, 如果不手工指定引用文件,该类会自动根据名字空间名进行猜测。

SourceCodeFileEncoding:如果以文件形式编译,指定文件的编码类型。

公共方法

public bool Compile(string code)

输入代码 字符串,并编译

public bool CompileFromFile(string sourceCodeFileName)

编译输入的代码文件

public object CreateInstance(string code, string typeFullName)

时间: 2024-09-20 15:29:57

C#代码动态编译、动态执行、动态调试的相关文章

利用CodeDom和反射动态编译并执行程序集

动态编译,听起来很酷,不是吗? 1.什么是动态编译 所谓动态编译是由两个字组成的:动态+编译.很显然,我们是想实现临时地 给出一段代码,然后将其编译成程序集(可以是在内存中,也可以是输出一个真 正的dll) 2.什么时候需要用到动态编译? 呃,这个问题有点难,简单地说,就是要动态的时候啦.呵呵.我们有的时候 需要提供系统这么一种灵活性,即有的类型没有办法预先写好,而是要根据情况 动态编译.这么说吧,例如我们希望根据数据库里面一个表的结构,动态编译出 来一个对应的类型. 3.如何使用动态编译.下面

Lua的编译、执行和调试技术介绍_Lua

dofile读入文件编译并执行,真正完成功能的函数是loadfile;与dofile不同,loadfile仅仅是编译代码成中间码,并且把编译后的chunk作为函数返回.如果发生错误,返回nil和错误信息.我们可以这么定义dofile: 复制代码 代码如下: function dofile(filename)      local f = assert(loadfile(filename))      return f() end 如果你只调用一次,可以使用dofile(filename),如果是

C#代码的编译与执行过程(摘自ms inside c#)

编译|过程|执行 1.You write source code in C#. 2.You then compile it using the C# compiler (csc.exe) into an EXE. 3.The C# compiler outputs the MSIL code and a manifest into a read-only part of the EXE that has a standard PE (Win32-portable executable) head

动态编译JAVA程序

编译|程序|动态 在Sun JDK 1.2及后续版本中,包含了一组可在程序运行时刻编译和执行Java代码的API.这些API被包含在tools.jar类库中.这个功能允许Java程序在运行时动态编译.执行小的代码块,在有些情况下这个功能会让Java应用程序的架构更加灵活.开放. 本文假定读者已经在计算机中安装并配置好了Sun JDK 1.2或更高的版本,并对javac编译器命令有所了解. 在Java程序中使用编译器 假定要使用javac命令编译 /home/mytest目录下Test.java文

.NET中的动态编译

代码的动态编译并执行是一个.NET平台提供给我们的很强大的工具用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外一种扩展的方式(当然这并不能算是严格意义上的扩展,但至少为我们提供了一种思路). 动态代码执行可以应用在诸如模板生成,外加逻辑扩展等一些场合.一个简单的例子,为了网站那的响应速度,HTML静态页面往往是我们最好的选择,但基于数据驱动的网站往往又很难用静态页面实现,那么将动态页面生成html的工作或许

C#动态编译及实现按钮功能动态配置

现在对做的系统要求要越来越灵活,功能配置越来越方便,牺牲一小部分的效率,而换取系统的灵活性,对于维护.功能扩展升级等工作提供了很大的方便. 前两天,一个项目要求界面上的按钮都是可以配置的,位置和功能都是可配置的.位置好说,用xml即可.但是功能可配置就有点难度了.如果说使用接口,那么参数则不好设置,而且就算用接口,在实际调用时,也得明确实例化哪个类.您可能还会说用反射,嗯,这的确是个好办法,但是还是在调用的时候,参数不确定,反射也就无用武之地了.查了半天,最终还是选择了动态编译. 用一个专门的类

详解.NET中的动态编译技术

代码的动态编译并执行是一个.NET平台提供给我们的很强大的工具用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外一种扩展的方式(当然这并不能算是严格意义上的扩展,但至少为我们提供了一种思路). 动态代码执行可以应用在诸如模板生成,外加逻辑扩展等一些场合.一个简单的例子,为了网站那的响应速度,HTML静态页面往往是我们最好的选择,但基于数据驱动的网站往往又很难用静态页面实现,那么将动态页面生成html的工作或许

Java理论与实践: 动态编译与性能测量

这个月,我着手撰写一篇文章,分析一个写得很糟糕的微评测.毕竟,我们 的程序员一直受性能困扰,我们也都想了解我们编写.使用或批评的代码的性能 特征.当我偶然间写到性能这个主题时,我经常得到这样的电子邮件:"我写的 这个程序显示,动态 frosternation 要比静态 blestification 快,与您上一 篇的观点相反!"许多随这类电子邮件而来的所谓"评测"程序,或者它们运行 的方式,明显表现出他们对于 JVM 执行字节码的实际方式缺乏基本认识.所以 ,在我着

C#动态编译,实现按钮功能动态配置

现在对做的系统要求要越来越灵活,功能配置越来越方便,牺牲一小部分的效率,而换取系统的灵活性,对于维护.功能扩展升级等工作提供了很大的方便. 前两天,一个项目要求界面上的按钮都是可以配置的,位置和功能都是可配置的.位置好说,用xml即可.但是功能可配置就有点难度了.如果说使用接口,那么参数则不好设置,而且就算用接口,在实际调用时,也得明确实例化哪个类.您可能还会说用反射,嗯,这的确是个好办法,但是还是在调用的时候,参数不确定,反射也就无用武之地了.查了半天,最终还是选择了动态编译. 用一个专门的类

详细介绍.NET中的动态编译技术_实用技巧

代码的动态编译并执行是一个.NET平台提供给我们的很强大的工具用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外一种扩展的方式(当然这并不能算是严格意义上的扩展,但至少为我们提供了一种思路). 动态代码执行可以应用在诸如模板生成,外加逻辑扩展等一些场合.一个简单的例子,为了网站那的响应速度,HTML静态页面往往是我们最好的选择,但基于数据驱动的网站往往又很难用静态页面实现,那么将动态页面生成html的工作或许