Visual Studio T4 はさまざまなセグメントをステートメント、式、ボイラープレート、およびクラス機能 IIRC として参照するため、ヘルパー/ブロックでそれらが何を意味するかを言うのは少し難しいです。
ただし、Mono T4 のソース コードを確認しているときに、Block は Statements を参照し、Helpers は ClassFeatures を参照していると推測します。
T4 の例:
<# // This is a Statement #>
<#+ // This is a ClassFeature #>
ステートメントが T4 の ClassFeatures の下に表示されないのは事実ですが、ここで私が考えているのは、Visual Studio T4 が ttinclude ファイルの「スマートな」マージを行うということです。Mono T4 がそうでない可能性があります。
その理由を理解するには、これら 2 つの 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 用に設計されており、もう少し洗練されたインクルード戦略を使用しています。
これがあなたがする必要がある理由なら
- ClassFeatures のみを使用するように SQLLite.ttinclude または Settings.ttinclude をリファクタリングします。.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);