我的团队正在使用T4模板生成一些基于XML配置文件的代码。由于将XML结构解析为POCO,我们决定使用公共资源(“主”T4模板)来解析和存储所有其他T4模板将用于生成其各自代码的值。带有XML路径的唯一T4是主模板。
因此,通过设置hostspecific="true"
并相对于主机设置路径,Master T4运行得很漂亮,但是添加(使用include file="..."
)并且当其中一个子T4模板运行时, XML的相对路径现在不正确......它正在寻找现在相对于孩子的位置的XML文件。
意图是Master将解析XML并通过类和属性的方式将数据存储在内存中,然后孩子们只需从主模板中的属性中提取他们需要的信息。
这可能是hostspecific
解决方案吗?
答案 0 :(得分:0)
为什么不将“主”模板放在解决方案的中心位置,然后将模板添加为需要的链接到单个项目中,而不是使用“包含”创建引用“主”模板的模板。 。这样,模板在项目中运行,但是从它的原始位置托管。
答案 1 :(得分:0)
包含的文件将复制到您的子模板生成的类中。 我做了类似于你想要完成的事情。
在master的模板中添加一个字段,其中包含主模板的路径。在Masters模板中使用它。
<#@ template debug="true" language="C#" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ include file="..\\..\commonT4\master.ttinclude" #>
<#
PathToMaster = @"..\\..\commonT4\";