我正在使用T4模板和T4工具箱来生成文本。
我想根据地区进行部分更新。例如,在第一次传递时,将生成所有内容,但如果文件再次更新,则只更新$ regions中的代码块。每个$ region都有一个不同的名称。
我正在寻找有关如何实施这一建议的建议。
一种方法是使用自定义预处理器,除了生成的代码区域之外,除去所有内容。另一个可能是在找到生成的代码区域时清除T4处理器的缓冲区,然后在找到区域的末尾时,替换生成的文件区域中与T4处理器已解析的文本相对应的文本。
假设
简单示例
<person>
<firstname>
$region FirstName generated
<#="//T4 Template stuff here" #>
$endregion
</firstname>
<lastname>
$region LastName generated
<#="//T4 Template stuff here" #>
$endregion
</lastname>
</person>
注意: 我意识到这个问题与此question类似,但从未提供合适的答案。我正在寻找一个可行的解决方案,而不是“它无法完成”。
答案 0 :(得分:1)
这正是创建部分classes,methods和MetadataType的原因。
在链接问题中,该人声称部分课程不是一个选项,如果没有解释,你没有做出这样的规定。如果不是这些选项,请详细说明原因。
答案 1 :(得分:0)
您可以选择在.cs文件或其他.tt文件中键入不可更改的文本,并使用T4导入或以其他方式使用其他文件中的代码创建两个项目合并的文件。
对于构建操作而不是编译,可以将不会实际编译的.cs文件设置为None。
实际上,您可以只读取停止在特殊区域行上的不变的.cs文件的原始文本,以插入T4认为适合此运行的任何内容。就此而言,我没有看到任何阻止你让T4读取它创建的现有文件,只改变区域内的文本。
.cs文件的简单文本解析可以查找#region
行。