【问题标题】:Can I create a t4 file with user input?我可以使用用户输入创建一个 t4 文件吗?
【发布时间】:2015-03-13 15:15:19
【问题描述】:

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

例如,我的程序中的用户会输入他们的姓名

Bob

我的 T4 模板我希望输出为

Hello Bob

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

【问题讨论】:

  • 您没有运行texttransform /? 来查看可用的命令行参数吗?您没有看到有关通过命令行传递变量和值的任何信息吗?我们不是男人吗?只有一个林肯吗?随机问题加剧?
  • 我实际上是在用 C# 构建整个项目,所以我没有使用 texttransform
  • 我希望通过应用做所有事情,而不是依赖外部应用
  • 这可能是包含在edit 中的好信息... T4 模板确实有一个“环境”的概念,标准的是 EnvDTE.. .我相信有一种方法可以通过它,传入你自己的“环境”,你可以通过它提供变量和值(即,而不是VS将EnvDTE作为“环境”传递到T4引擎,创建你自己的并将 that 传入...)

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


【解决方案1】:

使用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

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多