如何利用T4 模板提升ASP.NET MVC开发速度2015-01-31最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释,,原文地址如下: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]Common7IDEItemTemplates[CSharp | VisualBasic]WebMVCCodeTemplates

你也可以把“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_MACHINESOFTWAREMicrosoftVisualStudio9.0Generators
64位:HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftVisualStudio9.0Generators