天天看點

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生成