我有一个与TextTemplatingFilePreprocessor一起使用的T4模板,用于生成一个类,然后我可以用它来生成模板的输出。
在T4模板的开头,我导入了几个名称空间。 E.g。
<#@ import namespace="Company.ProductX.Widgets" #>
<#@ import namespace="Company.ProductX.Services" #>
//...
我想使用Preprocessor Directives将这些导入转换为另一组命名空间(它们提供相同的接口,但与ProductX的功能不同)。 E.g。
<#
#if(ProductX)
{
#>
<#@ import namespace="Company.ProductX.Widgets" #>
<#@ import namespace="Company.ProductX.Services" #>
//...
<#
}
#endif
#>
<#
#if(ProductY)
{
#>
<#@ import namespace="Company.ProductY.Widgets" #>
<#@ import namespace="Company.ProductY.Services" #>
//...
<#
}
#endif
#>
使用上面的示例,无论预处理程序指令如何,导入似乎都会在类中创建相应的using语句。 E.g。
using Company.ProductX.Widgets
using Company.ProductX.Services
using Company.ProductY.Widgets
using Company.ProductY.Services
是否有另一种方法可以在T4模板中使用预处理器来影响模板本身,而不仅仅是模板输出?
答案 0 :(得分:5)
在您的示例中,预处理程序指令将注入到生成的输出中。您可能做的是拥有一个ProductX.tt文件,该文件导入正确的命名空间并使用&lt;#@ include#&gt;包含模板代码。
像这样的东西(ProductX.tt):
<#@ import namespace="Company.ProductX.Widgets" #>
<#@ import namespace="Company.ProductX.Services" #>
<#@ include file="TheTemplateCode.ttinclude" #>
(ProductY.tt):
<#@ import namespace="Company.ProductY.Widgets" #>
<#@ import namespace="Company.ProductY.Services" #>
<#@ include file="TheTemplateCode.ttinclude" #>
我不确定这是否对您有所帮助,但说实话,我在这里与用例有点挣扎。
答案 1 :(得分:0)