C#发现之旅第十二讲 基于反射和动态编译的快速ORM框架(上)2011-04-27 博客园 袁永福动态编译技术所谓动态编译技术就是应用程序在运行时,程序内部自动的生成C# 代码,然后调用.NET框架提供的C#程序编译器生成临时的程序集,然后将临时程序集加载到 应用程序域中动态的调用其中的对象模块。动态编译技术内部调用了代码生成器。以 前我们是在编程时使用代码生成器生成代码文档,然后添加到C#工程中,然后进行整体编译 ,此时我们是手工的使用代码生成器,这个过程可以称为静态编译。而动态编译技术却是将 这个过程自动化了,而且调用代码生成器生成代码文本的过程放置在软件运行时执行。动态编译技术能同时兼顾灵活性和性能。微软.NET框架本身也有动态编译技术的应用,比 如XML序列化和反序列化,ASP.NET框架处理ASPX文件等等。一般而言使用动态编译技术的过程可以为1.应用程序需要调用动态编译功能,则 收集一些参数,然后调用动态编译模块。2.动态编译模块内部有一个全局的临时编译 的程序集的缓存列表,若根据应用程序传递的参数可以在缓存列表中找到相匹配的临时程序 集则直接返回这个程序集对象。3.动态编译模块收集参数,然后调用内置的代码生成 器生成代码字符串。4.动态编译模块调用微软.NET框架提供的C#代码编译器,生成一 个临时的程序集对象。具体就是调用Microsoft.CSharp.CSharpCodeProvider 提供的方法。 在这个过程中,程序将会在磁盘上生成若干临时文件,这个过程会受到微软.NET框架的安全 设置的影响。5.将临时编译生成的程序集对象保存到全局的临时程序集的缓存列表, 然后向应用程序返回这个临时程序集,而应用程序将会使用反射的手段来调用临时程序集提 供的功能。