这看起来像T4引擎错误或我做错了什么

时间:2011-09-14 13:10:54

标签: syntax t4

我有一个生成c ++代码的t4模板,我需要动态指定一个包含文件。

为了说明错误,我删除了代码的所有逻辑。

以下内容无法编译。 错误2在块中发现了意外的开始或结束标记。确保您没有错误输入开始或结束标记

void foo()
{
    string bob = "";
#>
    #include "..\..\SomeDir\<#=bob #>"
<#+ 
}
#>

如果在#include行中添加空格,则可以解决问题。

void foo()
{
    string bob = "";
#>
    #include "..\..\SomeDir\ <#=bob #>"
<#+ 
}
#>

这是一个错误还是有一些语法我缺少处理\后跟一个&lt;

2 个答案:

答案 0 :(得分:3)

反斜杠正在转义&lt;#= bob#&gt;的开放标记表达式块,所以你需要用另一个反斜杠来转义反斜杠。

 #include "..\..\SomeDir\\<#=bob #>"

应该这样做。

答案 1 :(得分:0)

正如GarethJ所说,双重反弹应该有效。我在VS2010 SP1中尝试了以下T4模板,它似乎按预期工作。

<#@ output extension=".hpp" #>
<#
    foo ();
#>
// Test
<#+
void foo ()
{
    var bob = "XYZ";
#>
#include "..\\<#=bob#>.h
<#+
    }
#>

在此特定的解决方法可能是在路径中使用正斜杠(即'/')而不是反斜杠(即'\')