全部的代碼生成器都是浮雲,若是能夠用aspx文件做爲模板

首先申明:標題中的若是是能夠去掉的。html

想寫這篇文章很長時間了,一來是跟你們分享一下,別浪費時間在寫代碼生成器上面了,什麼CodeSmith,XXCodeGenerator等等,都是浮雲;二來想跟你們交流交流已達到相互提升的目的。前端

這篇文章先不講如何實現,主要是講講思想,以及在實現過程當中可能會碰到的一些問題:web

1。每一個人都寫過本身的代碼生成器,每一個人都曾經爲本身的代碼生成器自豪過,可是有一個缺點,就是代碼生成器都是爲本身,或者爲本身的團隊定製的,換一我的,或者換一個團隊環境,你的那個代碼生成器可能就廢了。正則表達式

2。是否碰到過,每次你的生成的代碼都有一些不盡人意的時候(小問題如:一個字符的問題,字段,屬性擺放位置,代碼縮進等等,大問題如:增長一個方法),你都會打開你的代碼生成器源代碼,進行一些調整,而後從新編譯,ok,問題解決了,但是相似的狀況可能會發生n屢次。。。唉。。。瀏覽器

3。有沒有一個辦法能夠解決在出現上述第二條中出現的問題,稍微調整一下模板,而後就能夠了。方案固然有,現成的就有大把的基於模板的代碼生成器,如CodeSmith。服務器

4。若是你是大牛的話,若是你由於用別人的代碼生成器而感到拘束,由於不是自家的東西不暢,因此你想擁有本身代碼生成器,全部你開始了本身的代碼生成器的開發歷程,主要有下面幾種方式:工具

a).正則表達式查找替換(缺點:要寫不少正則表達式,好比,常量正則表達式,列表/列表項正則表達式);網站

b).基於xml文件方式,而後採用xmlDocument,XPath等方式加載,其實相似第一種,也是查找替換(這種相對第一種稍微好點,博客園中路過秋天大哥的秋色園的頁面html代碼就是經過這樣的方式實現的,至於難度,你們研究過的都知道有多麼複雜了)日誌

c).高級點,可能涉及到邏輯處理if else if else, for, foreach, while等等,這種須要話的時間可不是一點點,碰到的問題也是各類各樣的,稍微在博客園中搜索一下,就能夠找到不少相似的文章xml

5。4中提到的三種代碼生成器都不是我要的,因此一直仍是停留在本身爲本身定製的代碼生成器上,沒增長一段內容,都須要修改源碼,編譯。。。。糾結。

6。一次偶然的機會,看到有人說了這麼一句話:ASPX頁面上最好的代碼生成器,」誒,這個不錯哦「,周杰倫說過!可是若是要實現基於ASPX文件的代碼生成器,須要將aspx文件宿主在一個ApplicatioinHost中,纔可以被解析和訪問,通常有下面幾種方式:

a).IIS;

b).若是你沒有IIS你可使用中安裝VisualStudio的時候自帶的WebDev.WebServer.exe中;

c).網上有個開源的項目,名字爲:CassiniServer,能夠將一個WebSite目錄發佈成一個網站,可讓你經過瀏覽器訪問;(另外,路過秋天大哥也參考這個寫了一個工具,名字爲:IIS_V10,原本想個給地址下載的,但是上秋色園使用」找找看「功能搜索關鍵字「IIS_V10」竟然找不到相關文章,看來秋天大哥須要看看你的「找找看「的bug了。)

d).寫本身的WebServer,寫一個WebServer可不是那麼簡單的事情哦,雖然我也試過,可是卻以失敗了結,若是想嘗試的同窗能夠參考用C#開發本身的Web服務器 - 前端開發的日誌 - 網易博客系列文章,雖然很難,可是仍是能夠學到不少東西的。

7。到這裏我考慮放棄了,可是在我看到這篇文章(本身寫Web服務器(續) - 猴健居士 - 博客園)的時候,想我找到了解決方案了:下面這一句是核心代碼:

private AspxCreator _aspxHost = (AspxCreator)ApplicationHost.CreateApplicationHost(typeof(AspxCreator), "/",AppDomain.CurrentDomain.BaseDirectory);

若是以爲不夠,能夠去仔細看看那篇文章。

 

總結:一路走來,真是花了很多力氣,碰了很多牆壁,雖然走了不少彎路,可是學到了很多東西,仍是值得的,代碼實現尚在完善中,請你們期待!

相關文章
相關標籤/搜索