T4模板TextTemplatingFileGenerator和TextTemplatingFilePreprocessor区别
最近做一个项目,需要根据数据库表生成对应的实体类,于是想到了代码生成器。查阅了Nvelocity、T4、RazorEngine,对于一个微软技术派,觉得还是T4最亲切,使用简单,功能强大。
在尝试使用T4时,遇到了一些问题,这些问题使我弄明白了TextTemplatingFilePreprocessor和TextTemplatingFileGenerator在使用上的区别。
一、使用TextTemplatingFileGenerator做设计时design-time 模板。
官方csdn上的网址 https://msdn.microsoft.com/en-us/library/vstudio/dd820620.aspx
1、创建模板文件,默认情况下,模板文件的扩展名为.tt。自定义工具(custom tool)为TextTemplatingFileGenerator。

2、我们在HelloWorld.tt上编写文本或者代码。
<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ assembly name="$(TargetDir)\Client.exe" #>
<#@ import namespace="Client.Templates" #>
<#@ output extension=".txt" #>
<#
for(int i = ; i < ; i++)
{ WriteSquareLine(i);
#>
xx a <#=i#>
<#
}
#>
<#
Util1.HelloWorld();
#>
<#
var bb=Util1.Method2();
#>
<#=bb#>
End of list.
<#+ // Class feature block
private void WriteSquareLine(int i)
{ Console.WriteLine(i.ToString()); }
#>
然后保存,在模板相同的文件夹下就输出模板生成文件

3. 我们在c# 类Util1 添加一个方法Method3
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Client.Templates
{
public class Util1
{
public static void HelloWorld()
{
Console.WriteLine("ni haoqqqqxxx!");
} public static string Method2()
{
return "Method2 from c# code";
} public static string Method3()
{
return "code from c# class Util1 method Method3 ";
} }
}
4、在HelloWorld.tt 调用Util1.Method3,保存,在错误输出窗口显示错误

为什么呢 ? 在Util1.Method3() 确定已经存在,怎么提示不存在呢。 原来这就是TextTemplatingFileGenerator类型模板的关键。 使用TextTemplatingFileGenerator编写设计时(design-time)模板,需要在调用前,编译后,再在模板上调用。刚才我们编写Util1.Method3()后,但还没有编译就调用了。所以报错。现在我们删除模板调用的代码<#=Util1.Method3()#>,编译项目,编译成功后,再在模板上调用<#=Util1.Method3()#>,模板就可以保存成功不报错了。

以前就是设计时design-time模板使用TextTemplatingFileGenerator的用法,需要注意的模板调用的类,方法,变量等,需要编译后在调用。
二、使用TextTemplatingFilePreprocessor做运行时run-time模板
官方csdn网址 https://msdn.microsoft.com/en-us/library/vstudio/ee844259.aspx
1、添加模板文件SecondTemp.tt ,将自定义工具(custom tool)改为TextTemplatingFilePreprocessor。然后保存自动生成SecondTemp.cs类

2、在c# 类Util1 添加一个方法Method4,并在SecondTemp.tt模板上调用,点击保存,此时我们在c# 类Util1 添加一个方法Method4后并没有编译项目,保存时时没有保存,但也不生成输出
文件SecondTemp.txt。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Client.Templates
{
public class Util1
{
public static void HelloWorld()
{
Console.WriteLine("ni haoqqqqxxx!");
} public static string Method2()
{
return "Method2 from c# code";
} public static string Method3()
{
return "code from c# class Util1 method Method3 ";
} public static string Method4()
{
return "code from c# class Util1 method Method4";
}
}
}
3、在程序里调用模板SecondTemp.tt,并生成输出文件SecondTemp.txt
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Client.Templates; namespace Client
{
class Program
{
static void Main(string[] args)
{
SecondTemp temp = new SecondTemp();
String pageContent = temp.TransformText();
System.IO.File.WriteAllText("SecondTemp.txt", pageContent);
Console.WriteLine("task done!");
Console.ReadKey();
}
}
}
4、在目录下就可以看到SecondTemp.txt

以上就是TextTemplatingFileGenerator和TextTemplatingFilePreprocessor在使用上的区别。谢谢你的浏览
T4模板TextTemplatingFileGenerator和TextTemplatingFilePreprocessor区别的更多相关文章
- T4模板编辑器
一 二.工具 (T4模板编辑器) 使用效果 1.tangibleT4EditorPlusModellingToolsVS2013.msi 2.devart T4 Editor for Visual ...
- T4模板
T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文本模板,即一种自定义规则的代码生成器.根据业务模型可生成任何形式的文本文件或供程序调 ...
- 你必须懂的 T4 模板:深入浅出
示例代码:示例代码__你必须懂的T4模板:浅入深出.rar (一)什么是T4模板? T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文 ...
- 三、T4模板与实体生成
上文我们最后虽然用模板创建了一个实体类,但是类的内容仍旧是静态的,这里我们需要用动态方式生成类的内容.因为需要查询数据库这里又免不了各种繁琐的连接数据库操作,为了使我们的编码更加直观,仍然采 ...
- T4模板使用技巧
=============C#.Net 篇目录============== 示例代码:示例代码__你必须懂的T4模板:浅入深出.rar (一)什么是T4模板? T4,即4个T开头的英文字母组合:Tex ...
- 使用T4模板动态生成邮件内容并储存到任意位置
一.基础概念介绍 T4模板是扩展名为 .tt 的文本文件. 他分为设计时模板 和运行时模板.主要区别在于在vs中右键点击文件,打开“属性”,在“自定义工具”一栏中的值分别如下: 设计时模板: Text ...
- Asp.net MVC企业级开发(09)---T4模板
T4即为Text Template Transformation Toolkit,一种可以由自己去自定义规则的代码生成器.根据业务模型可生成任何形式的文本文件或供程序调用的字符串 在VS中T4模板是没 ...
- T4模板生成文件要点记录
可以使用 $(variableName) 语法引用 Visual Studio 或 MSBuild 变量(如 $(SolutionDir)),以及使用 %VariableName% 来引用环境变量.介 ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面
前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...
随机推荐
- 在Hadoop-2.2.0集群上安装 Hive-0.13.1 with MySQL
fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3872872.html 软件环境 操作系统:Ubuntu14.04 JDK版本:jdk1 ...
- 浅析Java内存模型
概述 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的变量是线程共享的,存在竞争问题的. Java内存模型规定了所有的变量 ...
- [golang]反射的用处--代码自动生成
背景: go语言处理db.json的时候,具体代码的变量定义和db字段.json输出的时候可能不一样. 这个时候,我们需要用tag的方式来进行定义. 例如: type MyStruct struct ...
- sql联合查询多个表
SELECT hp_patient.name, hp_ptorders.DrugName, hp_ptorders.Dosage,hp_ptorders.DosageUnit FROM hp_pati ...
- dede列表页分页地址优化(不同url相同内容问题解决)<转自http://www.966266.com>
<注明,完全转自http://www.966266.com/seoblog/?p=75> 存在问题 DEDE默认分类分页地址存在不同URL相同内容问题,导致内容重复,对SEO非常不利.情况 ...
- 分布式日志2 用redis的队列写日志
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- Schema约束
Schema约束(*xml中如何引入schema约束)(看懂Schema:能根据Schema写出XML文档来:)1.Schema约束文档本身就是一个XML文档.2.Schema对名称空间支持很好3.S ...
- 实现毛玻璃模糊效果/DRNRealTimeBlur
四种方法:1.美工出图 2.coreImage框架,高斯效果 3.ToolBar,覆盖在view上边 //1.添加图片 self.imageView.image = [UIImage imageNa ...
- Masonry 轻量级布局框架的使用
iOS 提供了自动布局的方法,但是原生的方法使用太过麻烦 ,Masonry 框架提供了类似的方法,同样可以实现自动布局 ,代码更加直观,而且容易理解. Masonry 是一个轻量级的布局框架.拥有自己 ...
- Apache禁止目录访问的方法
在学习ThinkPHP(3.2.3)的时候,公共文件夹.应用目录文件夹等都自带或者自动生成index.html的安全文件.但是ThinkPHP文件夹(核心包)却没有这样的设置.那么ThinkPHP核心 ...