0

我正在使用 T4 模板和 T4 工具箱来生成文本。

我想根据地区进行部分更新。例如,在第一次通过时会生成所有内容,但如果再次更新文件,则只会更新 $regions 中的代码块。每个 $regions 都有一个不同的名称。

我正在寻找有关如何实施的建议。

一种方法是使用定制的预处理器,去除除生成的代码区域之外的所有内容。另一种可能是在找到生成的代码区域时清除 T4 处理器的缓冲区,然后在找到该区域的末尾时,替换生成文件的区域中与 T4 处理器已解析的区域相对应的文本。

假设

  • 生成的代码区域不会包含应该被解析的块
  • 每个生成的文本区域都有一个不同的名称

简单的例子

<person>
    <firstname>
      $region FirstName generated
      <#="//T4 Template stuff here" #>
      $endregion
    </firstname>

    <lastname>
      $region LastName generated
      <#="//T4 Template stuff here" #>
      $endregion
    </lastname>

</person>

注意:我意识到这个问题与这个问题相似但从未提供过合适的答案。我正在寻找可行的解决方案,而不是“无法完成”。

4

2 回答 2

1

这正是创建 partial classesmethodsMetadataType的目的。

在链接的问题中,该家伙声称不解释就不能选择部分课程,您没有做出这样的规定。如果这些都不是一个选项,请详细说明原因。

于 2013-03-15T18:06:53.620 回答
0

您可以选择将不变的文本键入 .cs 文件或另一个 .tt 文件,然后进行 T4 导入或以其他方式使用另一个文件中的代码来创建两个项目合并的文件。

对于构建操作,可以将不实际编译的 .cs 文件设置为 None,而不是 Compile。

实际上,您可以只阅读在您的特殊区域行上停止的不变 .cs 文件的原始文本,以插入 T4 认为在此运行中合适的任何内容。就此而言,我看不出有什么阻止您让 T4 读取它创建的现有文件,并且只更改区域内的文本。

.cs 文件的简单文本解析可以查找这些#region行。

于 2013-03-16T01:09:03.290 回答