我可以使用用户输入创建 t4 文件吗?

Tay*_*ell 4 c# asp.net t4 templates visual-studio

我正在尝试通过命令行为 cs 文件制作一个生成器。我想使用 T4,因为我真的不知道还有其他方法来生成文件并轻松移动它们。我遇到的问题是尝试将用户输入数据传递到 T4 文件。

例如,我的程序中的用户将输入他们的名字

Bob

我的 T4 模板我希望输出是

Hello Bob

我似乎无法将数据传递给它,除非我将其写入文本文件并从中读取。还有其他方法可以做到这一点吗?在某些时候,我需要它来处理属性集合,这在文本文件中正确读取可能会很痛苦。

paq*_*mez 5

使用T4 参数指令,您可以将值从应用程序域传递到 T4 模板中。

\n\n

创建一个参数:

\n\n
<#@ parameter type="Full.TypeName" name="ParameterName" #>\n
Run Code Online (Sandbox Code Playgroud)\n\n

将其放入您的模板中:

\n\n
<#@ template language="C#" #>\n<#@ parameter type="System.String" name="MyUserName" #>\n<# Console.Write(MyUserName) #>\n
Run Code Online (Sandbox Code Playgroud)\n\n

从代码中填充它:

\n\n
// Get a service provider \xe2\x80\x93 how you do this depends on the context:\nIServiceProvider serviceProvider = dte; // or dslDiagram.Store, for example \n// Get the text template service:\nITextTemplating t4 = serviceProvider.GetService(typeof(STextTemplating)) \n                                                     as ITextTemplating;\nITextTemplatingSessionHost host = t4 as ITextTemplatingSessionHost;\n// Create a Session in which to pass parameters:\nhost.Session = host.CreateSession();\n// Add parameter values to the Session:\nsession["MyUserName"] = "Bob";\n// Process a text template:\nstring result = t4.ProcessTemplate("MyTemplateFile.t4",\n                                    System.IO.File.ReadAllText("MyTemplateFile.t4"));\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一个有用的链接

\n