首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T4模板在其他T4模板中的重用方法

T4模板在其他T4模板中的重用方法
EN

Stack Overflow用户
提问于 2013-10-22 14:14:12
回答 3查看 1.5K关注 0票数 3

在我的T4模板文件的末尾,我定义了一些函数:

代码语言:javascript
复制
<#+
    type Foo(...) { ... }
    type Bar(...) { ... }
    ...
#>

效果很好。

现在我正在创建其他模板。是否有任何方法来使用在我的第一个模板文件中声明的函数(也许通过使用第三个文件来存储这些函数)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-22 16:46:00

您可以使用包括指令共享另一个文件中的代码。

代码语言:javascript
复制
<#@ include file="Included.tt" #>
票数 4
EN

Stack Overflow用户

发布于 2013-10-23 05:51:23

马特的回答百分之百正确..。但是我更喜欢使用“模型”,有时是在不同的程序集中,这样我就可以更像一个视图,而不用逻辑来生成代码,除了非常简单的循环( for,foreachs...etc)。我觉得以后读起来容易多了。维护,重用和故障排除。由于模型是用普通的c#编写的,所以很简单,而且没有经过测试。

代码语言:javascript
复制
 <#@ output extension=".generated.cs" #>
 <#@ assembly name="$(SolutionDir)Bin\Net45\GeneratorModel.dll" #>
 <#@ import namespace="System.Collections.Generic" #>
 <#@ import namespace="GeneratorModel" #>
 <#@ import namespace="Extensions" #>
 <# IEnumerable<Type> entities = GetCollection();
    const string nameSpace = GetNameSpace();
  #> //Autogenerated Stuff
  using System;
  using System.Collections.Generic;
  namespace <#=nameSpace#> 
  {
    public interface IEntity{}

    <# foreach (var entity in entities){#>  

    #region class

    public partial class <#=entity.Name#> : IEntity {
        <#foreach(var prop in entity.GetPublicProperties()){#>
          /* More stuff Here .. */              
        <#}#>
    }

    #endregion class    
    <#}#>                                       
   }<#// End OF NameSpace #>
票数 2
EN

Stack Overflow用户

发布于 2013-11-06 22:11:05

第一个问题:您使用的是2012年还是2010年?2010年有一个问题,即没有T4的包含保护。这意味着,如果您生成一个可重用的T4助手-方法文件,您必须小心地一次又一次地包含它,并从引用相同的文件中获得错误。在一些简单的情况下,T4可以解决这个问题,但是如果您开始在T4中使用Sych的T4Toolbox或其他工具构建大型结构,您就会遇到问题。

代码语言:javascript
复制
<#@ include file="MyTools.Include.tt" #>

此外,您应该考虑到,您确实有两种类型的模板--“根”模板,它们打算直接生成,以及“支持”模板,它们打算包括在内--想出一种区分这些模板的约定是很好的--我使用".Include.tt“文件名来实现这一点,但其他人会有自己的方法。您还需要清除包含文件中的"Custom“属性,这样您就可以自由地使用"Transform All”命令,而不必在垃圾模板上浪费时间。

在极端情况下,您可以编译自己的程序集以供T4使用。这允许您快速转换,而不是等待动态编译可重用的内容..。但这也有自己的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19520350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档