博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
T4 反射实体模型生成代码(Demo)
阅读量:6291 次
发布时间:2019-06-22

本文共 2624 字,大约阅读时间需要 8 分钟。

1.新建一个T4 Script

 
<#@ template language="C#" debug="True" #> <#@ output extension="cs" #> <#@ Assembly Name="System.Core" #> <#@ Assembly Name="$(SolutionDir)Demo.Tools\bin\Debug\Demo.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.T4Generator\T4")); //输入文件路径 string outputPath = Path.Combine(solutionPath, @"MvcApplication1\Models"); //输出项目路径 string targetProject = Path.Combine(solutionPath, @"MvcApplication1\MvcApplication1.csproj"); //包含实体定义的DLL所在位置 string modelFile= Path.Combine(solutionPath, @"Demo.Entitys\bin\Debug\Demo.Entitys.dll"); //加载实体程序集 byte[] fileData= File.ReadAllBytes(modelFile); Assembly assembly = Assembly.Load(fileData); //反射出所有继承了Entity的实体类 IEnumerable
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; } ///  /// 获取 生成的文件名,根据模型名定义 ///  public string FileName { get { return string.Format("{0}.generated.cs", _model.Name); } } public override string TransformText() { #> //------------------------------------------------------------------------------ // 
// 此代码由工具生成。 // 对此文件的更改可能会导致不正确的行为,并且如果 // 重新生成代码,这些更改将会丢失。 //
// //
// 生成时间:<#= DateTime.Now.ToString("yyyy-MM-dd HH:mm") #> //
//------------------------------------------------------------------------------ using System; using System.Data; using Demo.Entitys; namespace MvcApplication1.Models { /// /// <#= _model.Description #> /// internal partial class <#= _model.Name #> { /// /// <#= _model.Description #> /// public <#= _model.Name #>() { <#= _model.Name #>(); } } } <#+ return this.GenerationEnvironment.ToString(); } } #>
 

 

转载地址:http://sccta.baihongyu.com/

你可能感兴趣的文章
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>