我使用T4生成一些脚本作为运行时模板。其中一部分是读取一些文本文件,其中包含一些T4指令,每个文件使用主模板生成输出。
每个文件可能包含以下文字:
Create table foo (
rid bigint identity(<#= db.DefaultSeed #>, <#= db.DefaultIncrement #>),
...other table specific stuff
我有一个模板,其中包含其他文件中引用的数据库的对象数据和一些源文件引用。
要运行的主要模板可能是:
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ include file="Src" #>
其中src指的是传递给模板的变量。 然后我想有一个文件的字符串列表,可以迭代来构建单个脚本,以便可以在控制台程序中完成以下操作:
public void BuildTables(){
List<string> files = getFiles();//just get a list of files in a folder to process
foreach(var f in files){
var mainTemplate = new MainTemplate(dbSettings);
mainTemplate.Src = f;
String text = mainTemplate.TransformText();
System.IO.File.WriteAllText(outPath + f, text);
}
}
然而,看起来include指令无法接受如下变量:
<#@ include file="<#= Src #>" #>
有没有办法将文本注入模板文件?