代码之家  ›  专栏  ›  技术社区  ›  Athari

如何在每次切换到另一个选项卡时停止执行T4?

  •  14
  • Athari  · 技术社区  · 14 年前

    当我编辑T4时,每次切换到另一个文件时都会执行该脚本。对于快速简单的脚本是可以的,但是有些脚本需要很长时间才能执行。有没有办法禁止这种行为?我希望脚本只在保存T4文件或从菜单中手动选择“运行自定义工具”时运行。

    5 回复  |  直到 14 年前
        1
  •  7
  •   GarethJ    14 年前

    T4连接到自定义工具机制( IVsSingleFileGenerator )在C#/VB项目系统中,它提供了run-on-save、run-custom工具菜单以及run-on-tab切换行为,所有这些都是为了实现一个简单的界面。

    不幸的是,这意味着T4实际上也无法控制这些行为,它们是定制工具的标准。

    另一种方法是使用VS建模和可视化SDK中的T4 MsBuild支持在构建时执行T4,然后禁用自定义工具。我将询问我的同事谁建立了msbuild支持,如果它使用自定义工具来识别模板集或不,并发回线程。

        2
  •  12
  •   James Close    13 年前

    http://msdn.microsoft.com/en-us/library/ee789839.aspx 关于将模板拆分为其他项目并共享输出文件。

    它详细说明了如何关闭 文本模板文件生成器 通过右键单击模板并清除 自定义工具 财产。这将在保存时停止模板生成代码。。。但是在切换标签页时它仍然在运行!

    所以在一个名为MyTemplate.tt的文件中:

    <#@ template language="VB" debug="false" hostspecific="true"#>
    <#@ include file="Include\MyTemplateCodeBehind.t4" #>
    <#@ output extension=".vb"#>
    <# ' Nothing to see here! #>
    

    在另一个名为MyTemplateCodeBehind.t4的文件中:

    <#@ template language="VB" debug="false" hostspecific="true"#>
    <#
       For Each something In somecollection
    #>
       <#= something.PrintMyCode() #>
    <#
       Next
    
    #>
    
        3
  •  3
  •   Carlos Toledo    8 年前

    <# throw new Exception(); #>
    

    因为我抛出了一个异常,进程停止,当我完成所有工作时,我只需要删除这一行。:)

        4
  •  2
  •   gmayer    10 年前

    在compile指令之后立即尝试,添加一个return to exit方法

    <#@ template language="C#" debug="false" hostspecific="true"#>
    <#@ include file="EF6.Utility.CS.ttinclude"#><#@ 
     output extension="Repository.cs"#><#
    return string.Empty;     //<-- add this line!!! 
    

    ...

        5
  •  0
  •   Dave Swersky    14 年前

    保存文件时执行T4模板。如果你有VS设置自动保存时,你标签远离文件,可以解释的行为。检查您的VS配置,以确定您退出时VS是否正在保存文件。