《如何让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

   }

#>

时间: 2024-10-26 18:55:12

《如何让TT T4模板输出多个文件(VS2010中)》-- access911.net 文章的相关文章

t4模板生成 _references.js 文件

t4模板功能: 指定目录,自动生成 _references.js 文件 相关文件说明: _references.js 实现js智能提示. 注意事项: hostspecific="true" <#@ template debug="false" hostspecific="true" language="C#" #> projectDir=Host.ResolveAssemblyReference("$(P

轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码

FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 基本语法: 1. 初始化:获取MultipleOutputHelper.ttinclude文件模板 在T4模板导入 //导入MultipleOutputHelper.ttinclude文件 路径 <#@include file="$(SolutionDir)\ORM.Model\T4\Mult

T4模板之基础篇

一.回顾 上一篇文章 ——T4模板之菜菜鸟篇,我们囫囵吞枣的创建了与“T4模板”有关的文件.在创建各个文件的这一个过程中,我们对于T4模板有了那么丁点的认识.现在就带着之前的那些问题,正式的迈入对“T4模板”的学习. 二.概念 2.1.类型 T4 文本模板有两种类型: 设计时 T4 文本模板 运行时 T4 文本模板 三.简要教程 我们只讲“设计时T4文本模板”,其他的都TMD属于高级部分了,哥不懂给不给? 打开之前我们创建的“TextTemplate_.tt”文件: 很明显的有一个特征,那么就是

二、T4模板

上文带大家见识了下T4,这里呢开始介绍T4模板有关的内容.关于T4模板介绍和使用网上一搜一箩筐,想深入研究的可以自行去找些资料,这里只介绍接下来我们需要使用的一些知识,不会面面俱到的讲T4模板所有的知识.T4模板使用和ASPX文件使用方式近乎类似所以也不需要花太多时间. 打开TT文件,输入如下代码并保存: @ assembly 指明TT模板环境使用的目标程序集 @ import 指明TT模板环境使用的命名空间 @ output 指明TT模板输出格式,包括文件后缀编码方式等 <##>中包含的代码

Ef+T4模板实现代码快速生成器

转载请注明地址:http://www.cnblogs.com/cainiaodage/p/4953601.html 效果如图,demo抛砖引玉,还望大家不吝赐教.(点击demo下载案例) 项目结构如图 T4BLL添加BLL.tt文件: T4Model添加Model文件: T4DAL添加DAL.tt文件: T4DAL 添加ADO.NET Entity Data Model选择dababase first 模式: 打开Model1.edmx文件下的Model1.tt打开,复制内容替换了T4Model

【.NET】T4模板——SSDL To SQL10.tt

很多人喜欢模板,因为合理地使用工具可以帮我们少写很多代码,可是模板的复杂性却又让很多人在使用中困难重重. 我们在ITOO项目中,使用了DB First和ModelFirst相结合的方式实现实体数据的映射.说得详细一点就是先将PowerDesigner设计的实体图导入数据库生成表,然后去掉外键关联,只保留主键.使用EF的DBFirst生成Model,在Model中手动添加关联关系,再根据模型生成数据库. 这样做有点繁琐,不过好处多多.首先避免了再次手动画Model,实体既多又容易出错,其次,如果数

MVC 之 T4模板简介

个人网站地址:nee32.com 一.T4模板内容简介 为了更好地学习T4模板,我们安装一个插件tangible T4 Editor 在使用了EF生成实体类后,我们会发现一个.tt后缀的文件,它就是T4模板,直接打开 它的内容如下图: 就是这一个模板,生成了我们需要的类,省去了我们手写的麻烦,提高了工作效率,生成的实体类如下图: 那么,这些类是如何用T4模板生成出来的?要自定义模板又该如何操作? 下面来简单介绍下T4模板中的核心代码 1.全局变量申明 <#@ template language=

[转]MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

本文转自:http://www.cnblogs.com/guomingfeng/p/mvc-ef-t4.html 〇.目录 一.前言 二.工具准备 三.T4代码生成预热 (一) 单文件生成:HelloWorld.cs (二) 多文件生成 四.生成数据层实体相关相似代码 (一) 生成准备 (二) 生成实体相关相似代码 生成实体映射配置类 生成实体仓储接口 生成实体仓储实现 五.源码获取 系列导航 一.前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少

T4模板:T4模板之基础篇

一.回顾 上一篇文章 --T4模板之菜菜鸟篇,我们囫囵吞枣的创建了与"T4模板"有关的文件.在创建各个文件的这一个过程中,我们对于T4模板有了那么丁点的认识.现在就带着之前的那些问题,正式的迈入对"T4模板"的学习. 二.概念 2.1.类型 T4 文本模板有两种类型: 设计时 T4 文本模板 运行时 T4 文本模板 三.简要教程 我们只讲"设计时T4文本模板",其他的都TMD属于高级部分了,哥不懂给不给? 打开之前我们创建的"TextT