插入控制块时T4模板抛出错误

时间:2014-06-07 18:25:32

标签: c# t4

我在文本模板文件中使用以下行

 <SettingsFilePath>
 <#=GetParameterValue("Blah")#>\Deploy\Settings\DeploymentSetting_<#environment.Name#>_<#=workflow.Name#>.xml
 </SettingsFilePath>

当我尝试修改此行以插入另一个表达式(environment.Type.ToString())时,如下所示

<SettingsFilePath>
<#=GetParameterValue("Blah")#>\Deploy\Settings\<#=environment.Type.ToString()#>\DeploymentSetting_<#environment.Name#>_<#=workflow.Name#>.xml
</SettingsFilePath>

我在TT模板的Visual Studio编译中收到以下错误

  

在块中发现了意外的开始或结束标记。确保您没有错误输入开始或结束标记,并且模板中没有任何嵌套块。

有谁知道我做错了什么?所有<#= #>块都已正确匹配。

2 个答案:

答案 0 :(得分:1)

谢谢大家。我根据Aaron的建议使用String.format解决了这个问题

<SettingsFilePath><#=string.Format(@"{0}\Deploy\Settings\{1}\DeploymentSetting_{2}_{3}.xml",GetParameterValue("blah"),environment.Type.ToString(), environment.Name, workflow.Name)#></SettingsFilePath>      

答案 1 :(得分:0)

&#39; \&#39; 设置后的字符为escaping the next T4 tag。这里的一个示例是,如果您希望在T4模板的输出中将字符串&lt;#directive#&gt; 生成为文本,则可以在T4模板中使用以下内容:

\<#@ directive \#>

解决该问题的一种方法是将** \ Deploy \ Settings **移动到字符串变量。

您的模板的另一个问题是它正在使用&lt;#environment.Name#&gt;这是无效的。

要使您的T4模板正常工作,您发布的部分将变为:

<SettingsFilePath>
<#=GetParameterValue("Blah")#><#=deploySettings#><#=environment.Type.ToString()#>DeploymentSetting_<#=environment.Name#>_<#=environment.Name#>.xml
</SettingsFilePath>

deploySettings 在T4模板的某处定义为字符串。

string deploySettings = @"\Deploy\Settings\";