c# - 我可以用用户输入创建一个 t4 文件吗?

标签 c# asp.net visual-studio templates t4

我正在尝试通过命令行为 cs 文件生成一个生成器。我想使用 T4,因为我不太了解另一种生成文件并轻松移动它们的方法。我遇到的问题是试图将用户输入数据传递给 T4 文件。

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

鲍勃

我的 T4 模板我希望输出是

你好鲍勃

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

最佳答案

使用 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"));

Another helpful link

关于c# - 我可以用用户输入创建一个 t4 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29035846/

相关文章:

C# LINQ xml解析使用 "PreviousNode"

javascript - 在Javascript中,如何获取gridview的当前页面索引?

c++ - cmake:为静态库的调试构建添加 "d"后缀

c# - 相同的 Excel 公式在 Visual Studio C# 中返回不同的结果

c# - 第二个参数干扰通用处理程序

c# - 非 Metro 应用程序中的 StorageFile Async 使用

c# - 如何将数据从 C# 推送到 ZeroMQ 并从 Node.JS 拉取数据,反之亦然?

c# - 使用 C# 将 PDF 文件转换为图像

javascript - 小数验证允许通过 Javascript 在按键事件上小数点后保留两位数字

c++ - 获取错误调试断言失败 : Expression c >= -1 && c <= 255