《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章
《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章
问题:
VS2010中自带的 TT 模板功能挺好用,但是如何定义其输出的目录,或者如何编程让一个tt文件可以输出多个结果文件。
回答:
<#@ Import Namespace="System.Text" #>
<#@ import namespace="System.IO" #>
<#@ Import Namespace="System.Reflection" #>
<#+
/// <summary>
/// 这个类主要用于重定义 TT t4 的输出位置,这样就可以在t4中动态定义其输出位置了。
/// </summary>
/// <remarks>
/// 如果要使用这个类,需要在项目中引用以下两个文件
/// C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating.10.0\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplating.10.0.dll
/// C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating.Interfaces.10.0\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll
/// </remarks>
/// <example>
/// <#@ Include File="ClassFile.ttinclude" #>
/// using (new File(fullPath, this))
/// {
/// //这里写模板代码
/// }
/// </example>
public class File : System.IDisposable
{
private string m_fileName;
private string m_bufferContent;
private StringBuilder m_textBuffer;/// <summary>
/// 这里 TextTransformation textTransformation 一直提示 错误 5 未能找到类型或命名空间名称“TextTransformation”(是否缺少 using 指令或程序集引用?) C:\xheditor-1.1.14\demo_ASP4\demo_ASP4\T4\ClassFile.ttinclude 22 33
/// 但是仍然能够正常运行,不知道为什么。
/// 终于找到 Microsoft.VisualStudio.TextTemplating 类了,在 C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating.10.0\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplating.10.0.dll 文件中。
/// textTransformation 参数定义其类型为 GeneratedTextTransformation 或者 TextTransformation 都可以成功生成,因为它永远不可能与 tt 模板中随机生成的 名称空间.TextTransformation 对应上。
/// 还需要引用 C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating.Interfaces.10.0\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll
/// </summary>
/// <param name="fileName"></param>
/// <param name="textTransformation"></param>
//public File(string fileName, GeneratedTextTransformation textTransformation)
public File(string fileName, GeneratedTextTransformation textTransformation)
{
string outputDir = null;
//网上的原始代码如下;
//PropertyInfo outputDirProp = textTransformation.GetType().GetProperty("OutputDirectory");
//if (outputDirProp != null)
// outputDir = (string)outputDirProp.GetValue(textTransformation, null);
//m_fileName = (outputDir ?? "") + fileName;//父目录识别错误,所以干脆定义文件名包括目录名由父程序来完成
m_fileName = fileName;
PropertyInfo genEnvProp = textTransformation.GetType().GetProperty("GenerationEnvironment", BindingFlags.FlattenHierarchy|BindingFlags.NonPublic|BindingFlags.Instance);
if (genEnvProp != null)
{
m_textBuffer = (StringBuilder)genEnvProp.GetValue(textTransformation, null);
m_bufferContent = m_textBuffer.ToString();
m_textBuffer.Remove(0, m_textBuffer.Length);
}
return;}
#region IDisposable Members
public void Dispose()
{
if (m_textBuffer != null)
{
using (StreamWriter streamWriter = new StreamWriter(m_fileName))
{
streamWriter.Write(m_textBuffer.ToString());
}
m_textBuffer.Remove(0, m_textBuffer.Length);
m_textBuffer.Append(m_bufferContent);
}
return;
}
#endregion
}#>
《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章的更多相关文章
- 将filenames里的每个字符串输出到out文件对象中注意行首的缩进
在Linux上用强大的shell脚本应该也可以完成,可是使用Windows的朋友呢?其实象这样一个简单任务用Python这个强大脚本语言只要几条语句就可以搞定了.个大家知道,要完成这样一个任务根本不用 ...
- FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码
FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...
- T4模板批量生成代码文件
<#@ template debug="false" hostspecific="true" language="C#" #> ...
- 【转】- 使用T4模板批量生成代码
前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...
- 二、T4模板
上文带大家见识了下T4,这里呢开始介绍T4模板有关的内容.关于T4模板介绍和使用网上一搜一箩筐,想深入研究的可以自行去找些资料,这里只介绍接下来我们需要使用的一些知识,不会面面俱到的讲T4模板所有的知 ...
- T4模板之基础篇
一.回顾 上一篇文章 ——T4模板之菜菜鸟篇,我们囫囵吞枣的创建了与“T4模板”有关的文件.在创建各个文件的这一个过程中,我们对于T4模板有了那么丁点的认识.现在就带着之前的那些问题,正式的迈入对“T ...
- PetaPoco T4模板修改生成实体
PetaPoco T4 模板生成的实体类全部包含再一个.CS文件中.通过修改PetaPoco的T4模板,生成单文件实体. 1.生成单CS文件模板: SigleFile.ttinclude <#@ ...
- Ef+T4模板实现代码快速生成器
转载请注明地址:http://www.cnblogs.com/cainiaodage/p/4953601.html 效果如图,demo(点击demo可下载案例) 项目结构如图 T4BLL添加BLL.t ...
- 自定义T4模板去掉实体对象中的下划线
在EF Power Tool 默认使用的T4模板中,如果数据库表有下划线,那么生成的实体也有下划线,但是我们实际使用的过程中,是不希望有下划线的,要解决这个问题,可以自定义这个T4模板 ...
随机推荐
- Largest Rectangle in Histogram 解答
Question Given n non-negative integers representing the histogram's bar height where the width of ea ...
- aop动态代理学习
学习,顺便做个demo,方便理解. A接口有c方法,类B实现A接口,原本应该是执行B类中的c方法,可现在不这样做: 我声明产生B类的代理类B',由它来冒充B类的“兄弟”并“实现”A接口, 对外界来说B ...
- Ubuntu 启动器/快捷方式/ 制作 (Eclipse为例)
首先,在路径/usr/share/applications/,中创建eclipse.desktop(如果没有的话) sudo touch /usr/share/applications/eclipse ...
- phpcms 去掉默认自动获取关键词、自动提取第一张图片?
进入后台,内容--模型管理--管理模型,选择文章模型的字段管理,选择第13项内容--修改,然后把字段提示代码中的2个checked去掉就行了. <label><input name= ...
- Ajax 获取数据代码
无刷新获取字符串: Html网页中: <script> //定义异步对象 var xmlHttp; //封装方法 function CreateXMLHTTP() { try { xmlH ...
- SQLLoader4(数据文件中的列与表中列不一致情况-filler)
A.数据文件中字段个数少于表中列字段个数,但数据文件中缺少的列,在表定义中可以为空.----- 这种情况是比较简单的,只需要将数据文件中数据对应的列的名字写到控制文件中即可.因为SQL*Loader是 ...
- jquery中的 ajax 以及map遍历
1.语法 $.ajax{ type:'get',//类型 有get post url:'',//路径 data:{name:$('#ma').val(),nameq:$('#maq').val()}, ...
- JS闭包(一)
闭包是指有权访问另一个函数作用域中的变量的函数. 创建闭包的常见方法:在一个函数内部创建另一个函数. 对彻底理解闭包,需要知道如何创建作用域链以及作用域链有什么作用的细节. 闭包的功能: 保存函数执行 ...
- 初学者的jquery登录注册和弹窗设计
初次学习前端,接触到jquery,写了一个简单的注册账号, 并判断输入内容是否符合命名规则的页面效果如下: 首先创建html,js文件 在做页面布局之前还要连接js文件,然后开始布局自己的页面效果 i ...
- [转载]Linux 性能监控、测试、优化工具
Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的.简单的小工具.系统性能专家 Brendan D. Gregg 在最近的 LinuxCon NA 2014 ...