Это похоже на ошибку двигателя T4 или я делаю что-то не так - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть шаблон t4, который генерирует код на C ++, который мне нужен, чтобы динамически указывать включаемый файл.

Я удалил всю логику своего кода только для иллюстрации ошибки.

Следующее не будет компилироваться.Ошибка 2 В блоке был обнаружен неожиданный начальный или конечный тег.Убедитесь, что вы не ввели неверный начальный или конечный тег

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

Если вы добавите пробел в строку #include, это решит проблему.

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

этоошибка или есть какой-то синтаксис, который мне не хватает для обработки \, за которым следует <</p>

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Обратная косая черта экранирует открытый тег для блока выражений <# = bob #>, поэтому вам придется экранировать саму обратную косую черту с другой обратной косой чертой.

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

должен сделать трюк.

0 голосов
/ 15 сентября 2011

Как упоминал Гарет, двойной зазор должен работать.Я попробовал следующий шаблон T4 в VS2010 SP1, и он, кажется, работает как ожидалось.

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

В этом конкретном способе может быть использование прямой косой черты в путях (то есть '/') вместо обратной косой черты (то есть '\')

...