《如何让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 文章的更多相关文章

  1. 将filenames里的每个字符串输出到out文件对象中注意行首的缩进

    在Linux上用强大的shell脚本应该也可以完成,可是使用Windows的朋友呢?其实象这样一个简单任务用Python这个强大脚本语言只要几条语句就可以搞定了.个大家知道,要完成这样一个任务根本不用 ...

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

    FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...

  3. T4模板批量生成代码文件

    <#@ template debug="false" hostspecific="true" language="C#" #> ...

  4. 【转】- 使用T4模板批量生成代码

    前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...

  5. 二、T4模板

    上文带大家见识了下T4,这里呢开始介绍T4模板有关的内容.关于T4模板介绍和使用网上一搜一箩筐,想深入研究的可以自行去找些资料,这里只介绍接下来我们需要使用的一些知识,不会面面俱到的讲T4模板所有的知 ...

  6. T4模板之基础篇

    一.回顾 上一篇文章 ——T4模板之菜菜鸟篇,我们囫囵吞枣的创建了与“T4模板”有关的文件.在创建各个文件的这一个过程中,我们对于T4模板有了那么丁点的认识.现在就带着之前的那些问题,正式的迈入对“T ...

  7. PetaPoco T4模板修改生成实体

    PetaPoco T4 模板生成的实体类全部包含再一个.CS文件中.通过修改PetaPoco的T4模板,生成单文件实体. 1.生成单CS文件模板: SigleFile.ttinclude <#@ ...

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

    转载请注明地址:http://www.cnblogs.com/cainiaodage/p/4953601.html 效果如图,demo(点击demo可下载案例) 项目结构如图 T4BLL添加BLL.t ...

  9. 自定义T4模板去掉实体对象中的下划线

            在EF Power Tool 默认使用的T4模板中,如果数据库表有下划线,那么生成的实体也有下划线,但是我们实际使用的过程中,是不希望有下划线的,要解决这个问题,可以自定义这个T4模板 ...

随机推荐

  1. 高精度快速幂(Java版)

    import java.io.*; import java.math.*; import java.util.*; import java.text.*; public class Main { pu ...

  2. python学习之路-6 冒泡算法、递归、反射、os/sys模块详解

    算法 冒泡算法 # 冒泡算法就是将需要排序的元素看作是一个个"气泡",最小的"气泡"最先浮出水面,排在最前面.从小到大依次排列. # 代码如下: li = [9 ...

  3. SpringMVC+easyUI CRUD 添加数据C

    接一篇文章,今天上午实现了添加数据.以下是Jsp.里面主要是看newUser()和saveUser().注意这函数里的url,newUser()里面去掉url属性.还要注意的一个问题 <div ...

  4. Guava源码分析——ServiceManager

    ServiceManager类:      用于监控服务集的管理器,该类提供了诸如startAsync.stopAsync.servicesByState方法来运行.结束和检查服务集,而且,通过监听器 ...

  5. 为github帐号添加SSH keys

    为github帐号添加SSH keys 2012-05-26 00:05 34279人阅读 评论(6) 收藏 举报 ssh文本编辑gitvim工具up 使用git clone命令从github上同步g ...

  6. SQL-SERVER2008登录错误233

    问题 : SQL Server2008在本地使用Windows身份验证登录或是使用SQL Server身份认证登录时报错:已成功与服务器建立连接,但是在登录过程中发生错取.(provider:共享内存 ...

  7. box-shadow实例1

    实例一: 1.html <div class="paddingMiddle"> <div class="blank"></div& ...

  8. ArcGIS10.3.1于2015年6月发布

    http://www.esrichina.com.cn/sectorapplication/ArcGIS%2010.3/index.html

  9. 循环小数 UVa202

    输入整数a和b(0<=a<=3000,1<=b<=3000),输出a/b的循环小数表示以及循环节长度. 例如,a=5,b=43,小数表示为0.(1162790697674418 ...

  10. Reading source code

    software is a system built up of many parts rebuild that decomposition see the patterns in codes is ...