《如何让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. hdu1561-The more, The Better(树形dp)

    Problem Description ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有 ...

  2. 精确覆盖DLX算法模板

    代码 struct DLX { int n,id; int L[maxn],R[maxn],U[maxn],D[maxn]; ]; ) //传列长 { n=nn; ;i<=n;i++) U[i] ...

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

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

  4. STL List容器

    转载http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html 各个容器有很多的相似性.先学好一个,其它的就好办了.先从基础开始 ...

  5. Android之字符串的拆分-split

    字符串的拆分可以利用android的 split 来简单实现 具体看如下代码: String s3 = "Real-How-To"; String [] temp = null; ...

  6. 动态SQL的执行,注:exec sp_executesql 其实可以实现参数查询和输出参数的

    本文转自:http://www.cnblogs.com/hnsdwhl/archive/2011/07/23/2114730.html 当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态 ...

  7. 【iOS开发-66】QQ设置界面的案例:利用storyboard开发静态的tableView界面,核心是Static Cells

    (1)效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JB ...

  8. Linux下redis的安装及用法

    1.下载源代码包redis-2.8.21.tar.gz,并将其上传到指定文件夹/urs/src,然后对其进行解压: [root@Slave1pc src]# tar -xvf redis-2.8.21 ...

  9. [置顶] 创建GitHub技术博客全攻略

    [置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...

  10. html进阶css(3)

    css的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许格式不仅应用于某个特定html标签元素,而且应用于其后代. <!doctype html> <html> ...