我正在尝试通过命令行为cs文件生成一个生成器。我想使用T4因为我真的不知道另一种生成文件的方法并且很容易移动它们。我遇到的问题是尝试将用户输入数据传递给T4文件。
例如,我程序中的用户将输入他们的名字
Bob
我的T4模板我想要输出
Hello Bob
我似乎无法将数据传递给它,除非我将其写入文本文件并从中读取。还有其他方法可以做到这一点吗?在某些时候,我需要它来处理属性集合,这可能是在文本文件中正确读取的痛苦。
答案 0 :(得分:4)
使用T4 parameter directive,您可以将应用域中的值传递到T4模板中。
创建参数:
<#@ parameter type="Full.TypeName" name="ParameterName" #>
将它放在你的模板中:
<#@ template language="C#" #>
<#@ parameter type="System.String" name="MyUserName" #>
<# Console.Write(MyUserName) #>
从代码中填充它:
// Get a service provider – how you do this depends on the context:
IServiceProvider serviceProvider = dte; // or dslDiagram.Store, for example
// Get the text template service:
ITextTemplating t4 = serviceProvider.GetService(typeof(STextTemplating))
as ITextTemplating;
ITextTemplatingSessionHost host = t4 as ITextTemplatingSessionHost;
// Create a Session in which to pass parameters:
host.Session = host.CreateSession();
// Add parameter values to the Session:
session["MyUserName"] = "Bob";
// Process a text template:
string result = t4.ProcessTemplate("MyTemplateFile.t4",
System.IO.File.ReadAllText("MyTemplateFile.t4"));