動態編譯技術
所謂動態編譯技術就是應用程序在運行時,程序內部自動的生成C# 代碼,然後調用.Net框架提供的C#程序編譯器生成臨時的程序集,然後將臨時程序集加載到 應用程序域中動態的調用其中的對象模塊。
動態編譯技術內部調用了代碼生成器。以 前我們是在編程時使用代碼生成器生成代碼文檔,然後添加到C#工程中,然後進行整體編譯 ,此時我們是手工的使用代碼生成器,這個過程可以稱為靜態編譯。而動態編譯技術卻是將 這個過程自動化了,而且調用代碼生成器生成代碼文本的過程放置在軟件運行時執行。
動態編譯技術能同時兼顧靈活性和性能。微軟.NET框架本身也有動態編譯技術的應用,比 如XML序列化和反序列化,ASP.Net框架處理ASPX文件等等。
一般而言使用動態編譯技術的過程可以為
1.應用程序需要調用動態編譯功能,則 收集一些參數,然後調用動態編譯模塊。
2.動態編譯模塊內部有一個全局的臨時編譯 的程序集的緩存列表,若根據應用程序傳遞的參數可以在緩存列表中找到相匹配的臨時程序 集則直接返回這個程序集對象。
3.動態編譯模塊收集參數,然後調用內置的代碼生成 器生成代碼字符串。
4.動態編譯模塊調用微軟.NET框架提供的C#代碼編譯器,生成一 個臨時的程序集對象。具體就是調用Microsoft.CSharp.CSharpCodeProvider 提供的方法。 在這個過程中,程序將會在磁盤上生成若干臨時文件,這個過程會受到微軟.Net框架的安全 設置的影響。
5.將臨時編譯生成的程序集對象保存到全局的臨時程序集的緩存列表, 然後向應用程序返回這個臨時程序集,而應用程序將會使用反射的手段來調用臨時程序集提 供的功能。