我有一个生成c ++代码的t4模板,我需要动态指定一个包含文件。
为了说明错误,我删除了代码的所有逻辑。
以下内容无法编译。 错误2在块中发现了意外的开始或结束标记。确保您没有错误输入开始或结束标记
void foo()
{
string bob = "";
#>
#include "..\..\SomeDir\<#=bob #>"
<#+
}
#>
如果在#include行中添加空格,则可以解决问题。
void foo()
{
string bob = "";
#>
#include "..\..\SomeDir\ <#=bob #>"
<#+
}
#>
这是一个错误还是有一些语法我缺少处理\后跟一个&lt;
答案 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
<#+
}
#>
在此特定的解决方法可能是在路径中使用正斜杠(即'/')而不是反斜杠(即'\')