最近由於需要在框架中提供一些自定義模板的功能,找到了一篇博客,可惜似乎是翻譯工具直接翻的,讀不通順,就試著自己翻譯下,我不會完全翻譯原文的句子,可能會對原文進行小范圍的我認為更合適的句子並添加些注釋,,原文地址如下:
http://blogs.msdn.com/b/webdev/archive/2009/01/29/t4-templates-a-quick-start-guide-for-asp-net-mvc-developers.aspx
在我們最近的博客中提到的ASP.NET MVC Release Candidate中,我們使用了T4 (Text Template Transformation Toolkit)模板來實現了Add Controller和Add View的代碼自動生成功能。我們希望能使用T4給大家帶來開發速度上的提升,因為用戶可以在很大程度上定制這些模板。
模板的位置和重寫
Add Controller和Add View都是通過在後台執行T4模板來實現代碼自動生成的。通過一些工具可以修改模板來定制想要生成的代碼。默認模板的位置在: [Visual Studio Install Directory]\Common7\IDE\ItemTemplates\[CSharp | VisualBasic]\Web\MVC\CodeTemplates\
你也可以把“CodeTemplates”目錄復制到項目的根目錄以便作為每一個項目的基礎在上述位置重寫和定制模板(只需要創建目錄名為“CodeTemplates”的目錄,並在其下創建“AddController”和“AddView”的子目錄即可)。需要默認目錄下有一些模板的重寫可能不起作用,因為自動生成代碼時將會優先選取項目目錄中匹配的模板。還有一個重點需要注意,你可以為Add View功能增加自己的.tt 文件,無論是在公用目錄下還是獨立的項目中,添加後都可以自動的顯示在Add View窗口的視圖選擇的下拉框中。
另外,復制上述文件夾(添加.tt文件)到項目中時,都會有警告提示,如下圖:
(運行這些文本模板可能會對你的電腦產生危害。如果模板來源不可信請不要運行。)
點擊“Cancel”將不能使用T4模板(如果你復制“CodeTemplates”目錄並增加多個.tt文件時,你都選擇了“Cancel”)。因為一旦項目發現一個.tt文件,文件的“自定義工具(CustomTool①)”屬性將被設置成“TextTemplatingFileGeneraror”,它會通知Visual Studio使用默認的T4宿主(Host②)去執行這個模板並且創建一個基於此模板內容的新的文件(在模板所在的目錄)。
① :自定義工具是一個實現了 Visual Studio 定義的IVsSingleFileGenerator接口的特殊組件。T4 自定義工具由Microsoft.VisualStudio.TextTemplating.VSHost.TemplatedCodeGenerator類實現並且在注冊表中注冊在Visual Studio 下命名為TextTemplatingFileGenerator。Visual Studio 將使用該名稱查找自定義工具、創建 COM 對象並調用其IVsSingleFileGenerator.Generate 方法
② :Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll 的TextTemplatingService服務實現Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost接口,為代碼生成引擎提供 Host (宿主)。在模板轉換過程中: Engine 負責代碼生成;Host負責提供轉換過程中行為具體實現及所需要的的所有外部資源,ITextTemplatingEngineHost和模板內容一起傳遞到Engine.ProcessTempalte方法中用於代碼生成
對於基於模板的一次性文件生成或簡單的使用T4,生成器都可以作為好的的實現方式---但是,因為依賴於自定義模板的宿主的Add View 和Add Controller模板都包含代碼(後面會提到),使用默認的生成器執行模板將會生成錯誤。需要復制模板到項目中之後然後清空自定義工具屬性值。
注意:如果你想去掉復制.tt文件時自動設置自定義工具的映射值,你可以通過注冊表實現---注意如果你想要恢復注冊表為默認值,你可以執行Visual Studio的恢復安裝,或手動改回。啟動注冊表編輯器並且找到指定的目錄(根據你的機器選擇是32位還是64位):
32位:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators
64位:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Generators