1.新建一个T4 Script
<#@ template language="C#" debug="True" #> <#@ output extension="cs" #> <#@ Assembly Name="System.Core" #> <#@ Assembly Name="$(SolutionDir)Demo.ToolsinDebugDemo.Tools.dll" #> <#@ import namespace="System.IO" #> <#@ Import Namespace="System.Linq" #> <#@ Import Namespace="System.Text" #> <#@ import namespace="System.Reflection" #> <#@ Import Namespace="System.Collections.Generic" #> <#@ Import Namespace="Demo.Tools" #> <#@ include file="T4Toolbox.tt" #> <#@ include file="EntityTemplate.tt" #> <# //脚本运行路径 string currentPath = Path.GetDirectoryName(Host.TemplateFile); //解决方案路径 string solutionPath = currentPath.Substring(0, currentPath.IndexOf(@"Demo.T4GeneratorT4")); //输入文件路径 string outputPath = Path.Combine(solutionPath, @"MvcApplication1Models"); //输出项目路径 string targetProject = Path.Combine(solutionPath, @"MvcApplication1MvcApplication1.csproj"); //包含实体定义的DLL所在位置 string modelFile= Path.Combine(solutionPath, @"Demo.EntitysinDebugDemo.Entitys.dll"); //加载实体程序集 byte[] fileData= File.ReadAllBytes(modelFile); Assembly assembly = Assembly.Load(fileData); //反射出所有继承了Entity的实体类 IEnumerable<Type> modelTypes = assembly.GetTypes().Where(m => typeof(Demo.Tools.Entity).IsAssignableFrom(m) && !m.IsAbstract); foreach(Type modelType in modelTypes) { T4ModelInfo model = new T4ModelInfo(modelType); //实体模板 EntityConfigurationTemplate config = new EntityConfigurationTemplate(model); //输出的文件编码 config.Output.Encoding = Encoding.UTF8; //定制输出项目 config.Output.Project = targetProject; //输出生成的文件 config.RenderToFile(Path.Combine(outputPath, config.FileName)); } #>
2、新建T4 Template,这里是具体的模板
<#+ public class EntityConfigurationTemplate : CSharpTemplate { private T4ModelInfo _model; public EntityConfigurationTemplate(T4ModelInfo model) { _model = model; } /// <summary> /// 获取 生成的文件名,根据模型名定义 /// </summary> public string FileName { get { return string.Format("{0}.generated.cs", _model.Name); } } public override string TransformText() { #> //------------------------------------------------------------------------------ // <auto-generated> // 此代码由工具生成。 // 对此文件的更改可能会导致不正确的行为,并且如果 // 重新生成代码,这些更改将会丢失。 // </auto-generated> // // <copyright file="<#= _model.Name #>.generated.cs"> // 生成时间:<#= DateTime.Now.ToString("yyyy-MM-dd HH:mm") #> // </copyright> //------------------------------------------------------------------------------ using System; using System.Data; using Demo.Entitys; namespace MvcApplication1.Models { /// <summary> /// <#= _model.Description #> /// </summary> internal partial class <#= _model.Name #> { /// <summary> /// <#= _model.Description #> /// </summary> public <#= _model.Name #>() { <#= _model.Name #>(); } } } <#+ return this.GenerationEnvironment.ToString(); } } #>
PS:以上模板扒自郭明锋的GMF框架