天天看點

CodeDom系列四--Code生成

      我們利用CodeDom技術生成了一些列Codedom Expression ,接下來的任務就是編譯和生成,生成c#、Vb或者是.NET平台支援語言,編譯程式集(dll或者是exe)。

      CodeDomProvider:在2.0後提供了CodeDomProvider.CreateProvider(string language)的工廠類,取代以前的  

Microsoft.VisualBasic.VBCodeProvider、 Microsoft.CSharp.CSharpCodeProvider的建立CodeDomProvider的方式,現在我們可以僅用一句CodeDomProvider.CreateProvider("c#")方式就可以建立CSharpCodeProvider。

      有了CodeDomProvider我們就可以利用Provider生成對應語言的源代碼:ICodeGenerator :代碼生成抽象,可以用provider.CreateGenerator()取得;這個類給我提供了代碼生成的方法有:

GenerateCodeFromCompileUnit:從編譯單元生成code 

GenerateCodeFromExpression:從表達式生成code 

GenerateCodeFromMember:從類型成員Member生成code 

GenerateCodeFromNamespace:從命名空間生成code 

GenerateCodeFromStatement:從statement語句生成code 

GenerateCodeFromType:從類型Type生成code。

其實在CodeDomProvider也通過了同樣的方法,個人習慣于用CodeDomProvider的方法。

還有就是System.IO.TextWriter的參數,這個參數我們可以通過輸出File檔案的StreamWrite或者是StringBuilder的StringWrite。故名思意,其輸出的方式和位置不同。

例如:

CodeGeneratorOptions geneOptions = new CodeGeneratorOptions();//代碼生成選項

            geneOptions.BlankLinesBetweenMembers = false;

            geneOptions.BracingStyle = "C"; // C風格

            geneOptions.ElseOnClosing = true;

            geneOptions.IndentString = "    ";

這裡代碼生成的全部就完成了,我們來一個簡單的擔待生成Demo:功能就是輸出一句話: 

System.Console.WriteLine("Tes tCodeDom Generate!")

運作結果:

CodeDom系列四--Code生成

本文轉自破狼部落格園部落格,原文連結:http://www.cnblogs.com/whitewolf/archive/2010/07/05/1771138.html,如需轉載請自行聯系原作者