《如何让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模板 ...
随机推荐
- 一个简陋的 CSS 样式
有些网友对 Smart Framewok 中的 Sample 示例的样式比较感兴趣.由于本人对前端不太精通,但为了满足网友们的需求,只好献丑了. 以下这个简陋的 CSS 样式: ? 1 2 3 4 5 ...
- Why Hadoop2
自从Hadoop2出现之后,其迅速代替了Hadoop1的地位,并丰富了Hadoop的应用场景.假设如今有公司使用Hadoop的话,往往直接採用Hadoop2了. Hadoop2能被如此广泛的使用,肯定 ...
- nodejs之简介及安装(一)
@[nodejs|个人学习笔记] nodejs简介 什么是node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 参考网站 一.nodejs.cn 二 ...
- dtree基础
最近用到了dtree来建立树,纠结过好久后,终于有了些门道,下面的总结希望对咪咪们有些帮助: dtree用来建立静态树或者动态树都是很方便的,老外给提供了整个的JS,然后我们只是操心这个树中存放的元素 ...
- Android拍照与相册选取图片
做过几次拍照,相册选取图片,但都记不住,这次发表个简单的保存下 private static final int PHOTO_GRAPH = 1;// 拍照 private static final ...
- 1203.1——条件语句 之 if语句
用if语句可以构成分支结构.它根据给定的条件进行判断,以决定执行某个分支程序段.C语言的if语句有三种基本形式. 语句的三种形式 1) 第一种形式为基本形式:if if(表达式) 语句其 ...
- winsocket <研究了一天的成果>
首先,这都是套路( ▼-▼ ) 头文件 #include <WinSock.h> #include <Winsock2.h> 用这个,这个是升级版 各个函数解释 1.W ...
- C++程序设计实践指导1.12数组中数据线性变换改写要求实现
改写要求1:分别用指针pa.pb代替数组 改写要求2:从键盘输入data元素 元素个数任意,输入0结束 #include <cstdlib> #include <iostream&g ...
- No1_3.数组初始化_Java学习笔记
public class HelloArray { public static void main(String[] args) { // TODO Auto-generated method stu ...
- 加载php_curl.dll和php_openssl.dll出错原因及解决办法
今天在XP下安装PHP开发环境时,需要加载php_curl.dll这个动态库,自己想当然的在php.ini里把extension=php_curl.dll打开以为就可以了.可以在apache的logs ...