0

T4 テンプレートと T4 ツールボックスを使用してテキストを生成しています。

地域に基づいて部分的な更新を行いたいと思います。たとえば、最初のパスではすべてが生成されますが、ファイルが再度更新されると、$regions 内のコード ブロックのみが更新されます。$regions のそれぞれには、個別の名前があります。

これをどのように実装できるかについての提案を探しています。

1 つの方法は、生成されたコード領域以外のすべてを取り除くカスタム プリプロセッサを使用することです。もう 1 つの方法は、生成されたコード領域が見つかったときに T4 プロセッサのバッファをフラッシュし、領域の終わりが見つかったときに、T4 プロセッサが解析した領域に対応する生成されたファイルの領域内のテキストを置き換えることです。

仮定

  • 生成されたコード領域には、解析する必要があるブロックが含まれていません
  • 生成された各テキスト領域には個別の名前があります

単純な例

<person>
    <firstname>
      $region FirstName generated
      <#="//T4 Template stuff here" #>
      $endregion
    </firstname>

    <lastname>
      $region LastName generated
      <#="//T4 Template stuff here" #>
      $endregion
    </lastname>

</person>

注:この質問はこの質問と似ていますが、適切な回答が提供されていません。「できない」ではなく、実行可能な解決策を探しています。

4

2 に答える 2

1

これはまさに、部分クラスメソッド、およびMetadataTypeが作成された目的です。

リンクされた質問では、説明せずに部分クラスはオプションではないと男は主張していますが、そのような規定はありません。それらがオプションでない場合は、その理由を詳しく説明してください。

于 2013-03-15T18:06:53.620 に答える
0

変更されないテキストを .cs ファイルまたは別の .tt ファイルに入力し、T4 インポートを行うか、他のファイルのコードを使用して、両方の項目が結合されたファイルを作成するオプションがあります。

実際にコンパイルされない .cs ファイルは、コンパイルではなく、ビルド アクションに対して [なし] に設定できます。

実際には、変更されていない .cs ファイルの生のテキストを読み取り、特別なリージョン行で停止して、T4 がこの実行で適切と判断したものを挿入することができます。さらに言えば、T4 が作成した既存のファイルを読み取らせ、領域内のテキストのみを変更することを妨げるものは何もありません。

.cs ファイルの単純なテキスト解析で行を探すことができます#region

于 2013-03-16T01:09:03.290 に答える