在這裏總結的是本博客中的一些關係代碼生成的技術,其中包含 CodeDom,CodeSmith,T4,Mono.Cecil MSIL(靜態AOP實例)注入,以及一些雜記 。
一:CodeDom目錄
CodeDOM 提供了表示許多常見的源代碼元素類型的類型。您可以設計一個生成源代碼模型的程序,使用 CodeDOM 元素
構成一個對象圖。可以使用受支持的編程語言的 CodeDOM 代碼生成器,將該對象圖呈現爲源代碼。CodeDOM 也可以用於將
源代碼編譯成二進制程序集。
CodeDOM 的一些一般用途包括:
- 模板化代碼生成:生成 ASP.NET、XML Web 服務客戶端代理、代碼嚮導、設計器或其他代碼發出機制的代碼。
- 動態編譯:支持以一種或多種語言進行代碼編譯。
- CodeDom系列-開篇HelloWord
- CodeDom系列二---程序基本結構--符號三角形問題
- CodeDom系列--事件(event)定義和反射調用
- CodeDom系列四--Code生成
- CodeDom系列五--動態編譯
- CodeDom六--實體類生成示例
- 代碼生成技術--CodeDom VS T4
二:CodeSimth:
CodeSmith是一個基於模板的代碼生成器,它可以生成任何基於ASCII的編程語言代碼。生成的代碼可以使用屬性進行定製。屬性可以是任何具有設計器的.NET對象(大多數.NET內置類型已經有設計器),也可以是一個允許你從結果中有條件地添加或移除代碼的簡單的boolean 屬性,或是一個對象,例如能夠訪問數據庫表信息的TableSchema對象(包括在SchemaExplorer中)。CodeSmith完全可擴展,它允許用戶創建定製屬性類型。CodeSmith中包括多個定製屬性類型的例子,例如,定製一個允許選擇XML文件(使用XmlSerializer可將其反序列化到對象中)的屬性類型。CodeSmith還允許用戶在模板中引用和調用指定的外部程序集並且允許從外部程序集的類生成模板。
三:MSIL注入:
NET是一門多語言平臺,這是我們所衆所周知的,其實現原理在於因爲了MSIL(微軟中間語言)的一種代碼指令平臺。所以.NET語言的編譯就分爲了兩部分,從語言到MSIL的編譯(我喜歡稱爲預編譯),和運行時的從MSIL到本地指令,即時編譯(JIT)。JIT編譯分爲經濟編譯器和普通編譯器。
- 淺談.NET編譯時注入(C#-->IL)
- 淺談VS編譯自定義編譯任務—MSBuild Task(csproject)
- 編譯時MSIL注入--實踐Mono Cecil(1)
- MSBuild + MSILInect實現編譯時AOP之預覽
- MSBuild + MSILInect實現編譯時AOP-改變前後對比
- PostSharp - Thread Dispatching(GUI多線程)
四:其他雜記
其實在.net平臺還有很多code生成技術T4(其實現在我更傾向於T4模板,但是園內牛人們已經有很多文章了,所以沒寫),Razor(ASP.NET MVC3帶來的一種語法很漂亮,舒服的模板引擎,我也很喜歡,只是需要4.0,我打大多數工作任在3.5上工作),Mono.Cecil(MSIL程序集靜態注入),Emit(MSIL的動態注入),StringTemplate(古老的模板引擎了),以及其他第三方的模板引擎,都沒有寫完。在以後可能會更側重於實際應用案例。