点击此处http://www.olegsych.com/2008/03/how-to-generate-multiple-outputs-from-single-t4-template/
我试图将var personName从test1.tt传递给template1.tt,但我看不到没有文件的原因?:
template1.tt
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".txt" #>
<#@ assembly name="System"#>
hello <#= personName #>
test1.tt
<#@ template language="C#" hostspecific="True" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#@ import namespace="System.Runtime.Remoting.Messaging" #>
CallContext.SetData("template1.personName", "Baby");
ProcessTemplate("template1.tt","testoutput.txt");
<#+
void ProcessTemplate(string templateFileName, string outputFileName) {
string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
string outputFilePath = Path.Combine(templateDirectory, outputFileName);
string template = File.ReadAllText(Host.ResolvePath(templateFileName));
Engine engine = new Engine();
string output = engine.ProcessTemplate(template, Host);
File.WriteAllText(outputFilePath, output);
}
#>
答案 0 :(得分:3)
Oleg的例子使用两个模板。一个用于保存方法,另一个用于导入方法以调用方法。
来自帮助示例:
ProcessTemplate.tt
<#@ template language="C#" hostspecific="True" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#+
void ProcessTemplate(string templateFileName, string outputFileName)
{
string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
string outputFilePath = Path.Combine(templateDirectory, outputFileName);
string template = File.ReadAllText(Host.ResolvePath(templateFileName));
Engine engine = new Engine();
string output = engine.ProcessTemplate(template, Host);
File.WriteAllText(outputFilePath, output);
}
#>
此模板还会打开hostspecific选项以生成Host属性。 ProcessTemplate方法使用此属性来确定独立模板文件以及输出目录的完整路径。 ProcessTemplate方法创建一个T4 Engine类的新实例,用于编译和运行独立模板。
这是一个模板,它使用这个帮助器方法从两个独立模板生成两个输出文件。“(来自帮助示例的文本)
Example3.tt
<#@ include file="ProcessTemplate.tt" #>
<#
ProcessTemplate("Standalone1.tt", "StandaloneOutput1.txt");
ProcessTemplate("Standalone2.tt", "StandaloneOutput2.txt");
#>
这是帮助示例中引用的第一个模板。如果您指定了错误,它将有助于调试。