【发布时间】:2011-04-07 20:34:47
【问题描述】:
有谁知道是否可以在 VS2010 中从另一个 T4 模板运行 T4 模板文件
谢谢
【问题讨论】:
标签: visual-studio-2010 templates t4
有谁知道是否可以在 VS2010 中从另一个 T4 模板运行 T4 模板文件
谢谢
【问题讨论】:
标签: visual-studio-2010 templates t4
是的,你可以。我就是这样做的:
string templateText = File.ReadAllText(Host.ResolvePath(templateFileName));
Engine engine = new Engine();
string output = engine.ProcessTemplate(templateText, Host);
//this is optional - record all output to your file of choice:
File.WriteAllText(outputFilePath, output);
【讨论】:
您可能正在寻找的是T4 Toolbox。它将允许您在单个文件中实际生成代码并自动将它们添加到项目中。
强烈推荐。
我使用 t4 工具箱仅基于模型生成整个项目。
(T4 Toolbox 以前位于 http://t4toolbox.codeplex.com/,但现在位于 https://github.com/olegsych/T4Toolbox)
【讨论】:
我们经常这样做。下面是一个示例,我们如何重用一个通用 T4 模板但“传递参数”到其中:
<#
var currentUsername = "billclinton"; // this is for integration tests impersonating a user in our case
#>
<#@ include file="..\SomeTemplateThatIWantToReuseHere.tt" #>
并且我们通过动态确定 T4 模板实际运行的位置(在本例中是包含 include 行的 T4 模板)来保持我们的 T4 模板“通用”:
string namespaceName = code.VsNamespaceSuggestion();
var namespaceParts = namespaceName.Split('.');
var currentNamespaceLeg = namespaceParts.Last();
这让我们可以做一些非常强大的模板而不需要复制我们的模板。唯一被“重复”的是我们的 4 行 .tt 文件,其中包含 include 调用,但除了我们想要通过以我们的方式传递变量来执行的任何“配置”之外,这些几乎是免维护的去做吧。
【讨论】:
有多个选项具有不同的权衡:
【讨论】: