3

我有一个名为 ParentTemplate 的 T4 模板,其中包括另一个名为 ChildTemplate 的 T4 模板。这个想法是每次调用 ChildTemplate 时都会调用我的 ParentTemplate 并生成一个文件。但是,我的 ParentTemplate 还创建了一个我不需要的文件 (.cs)。ParentTemplate 的 Build Action 设置为“None”,Custom Tool 设置为“TextTemplatingFileGenerator”。以下代码来自 ParentTemplate:

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#
    for (int i = 0; i < 3; i++)
    {
#>
<#@ include file="ChildTemplate.t4" #>
<#
    string filename = Path.Combine(path, String.Format("{0}i.txt", myFile));
    File.WriteAllText(filename, this.GenerationEnvironment.ToString());
    this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
    }
#>

ChildTemplate 中只有文本“Hello World”。所以我想要的输出是 3 个 .txt 文件,内容是“Hello World”,就是这样。所以没有像 ParentTemplate.cs 这样的其他文件。

知道如何防止 ParentTemplate.cs 的生成吗?

4

2 回答 2

4

只需清除Custom Tool属性值。

于 2013-02-25T10:32:52.933 回答
1

这里它说您可以执行以下操作来欺骗 Visual Studio 不为使用生成器的 .tt 文件生成输出文件。

<#@ output extension="/" #>

或者

<#@ output extension="\\" #>

注意:这是一个 hack,仍然会产生警告。
注意:清除Custom Tool属性值不会达到您想要的效果,因为这将完全避免运行模板。

您还可以采取更迂回(且耗时)的方法:

  • 在生成期间从 VSProject 中删除文件DTEEnv(仅在 Visual Studio 中运行时可用)。
  • 使用构建任务在生成后删除和删除项目(使用MSBuild)。
于 2015-10-09T23:21:58.863 回答