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

Ath*_*ari 16 c# t4 code-generation customtool visual-studio

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

Jam*_*ose 12

我有完全相同的问题.我按照本文中的步骤http://msdn.microsoft.com/en-us/library/ee789839.aspx关于将模板拆分为另一个项目并共享输出文件.

它详细说明了如何通过右键单击模板并清除CustomTool属性来关闭附加到模板的TextTemplatingFileGenerator工具.这会在保存时停止模板生成代码...但切换选项卡时它仍然运行!

我认为解决这个问题的唯一方法是将所有模板代码移动到具有不同后缀的新文件(如ttinclude或t4等),然后使用include指令将此文件包含在实际的T4模板文件中.这样,您将永远不需要打开该文件来编辑模板,因此它不会意外运行.

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

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

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

<#@ template language="VB" debug="false" hostspecific="true"#>
<#
   For Each something In somecollection
#>
   <#= something.PrintMyCode() #>
<#
   Next

#>
Run Code Online (Sandbox Code Playgroud)


Gar*_*thJ 6

T4连接到C#/ VB项目系统中的自定义工具机制(IVsSingleFileGenerator),这使它可以运行保存,运行自定义工具菜单以及运行选项卡切换行为 - 所有这些都是为了实现简单的界面.

不幸的是,这意味着T4基本上无法控制这些行为,这些行为是自定义工具的标准.

另一种方法是使用VS Modeling and Visualization SDK中的T4 MsBuild支持在构建时执行T4,然后禁用自定义工具.我会询问构建msbuild支持的同事,如果它使用自定义工具来识别模板集合并回发给线程.


Car*_*edo 5

我正在做的(可能是一个糟糕的解决方案)是在 tt 文件的开头编写一个异常行,例如:

<# throw new Exception(); #>
Run Code Online (Sandbox Code Playgroud)

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