Сложно сказать, что они имеют в виду под Helper / Block, поскольку Visual Studio T4 называет различные сегменты как Statement, Expression, BoilerPlate и ClassFeature IIRC.
При проверке исходного кода для Mono T4, однако, я бы предположил, что Block относится к операторам, а помощники относятся к ClassFeatures.
Пример T4:
<# // This is a Statement #>
<#+ // This is a ClassFeature #>
Это правда, что операторы не могут появляться ниже ClassFeatures в T4но я думаю, что здесь происходит то, что Visual Studio T4 выполняет «умное» объединение файлов ttinclude.Возможно, что Mono T4 нет.
Чтобы понять, почему рассмотрим эти два файла T4.
Пример T4.ttinclude:
<# // 1. This is a Statement #>
<#+ // 1. This is a ClassFeature #>
Пример T4.tt
<# // 2. This is a Statement #>
<#+ // 2. This is a ClassFeature #>
<#@ include file="T4.ttinclude" #>
Простойреализация include просто объединит файл:
<# // 2. This is a Statement #>
<#+ // 2. This is a ClassFeature #>
<# // 1. This is a Statement #>
<#+ // 1. This is a ClassFeature #>
Но это недопустимый шаблон T4, так что Visual Studio T4 делает (насколько мне известно) объединение файлов в это, что является законным:
<# // 1. This is a Statement #>
<# // 2. This is a Statement #>
<#+ // 1. This is a ClassFeature #>
<#+ // 2. This is a ClassFeature #>
Так что, если мне позволят догадаться, Mono T4 включает в себя файл с использованием простого подхода, но шаблоны SubSonic предназначены для Visual Studio T4, в которой используется немного более изощренная стратегия включения.
ЕслиПо этой причине вам нужно
- Refactor SQLLite.ttinclude или Settings.ttinclude, чтобы использовать только ClassFeatures.Это, вероятно, серьезный рефакторинг, поскольку наличие операторов в файле .ttinclude очень удобно.
- Рефакторинг Mono T4 для создания чего-то похожего на Visual Studio T4
Боюсь, что и хороших новостей нет..
PS.При чтении кода Mono кажется, что разработчик учел это:
//TODO: are blocks permitted after helpers?
throw new ParserException ("Blocks are not permitted after helpers", seg.StartLocation);