2

ビルドプロセスに複雑さが生じることを恐れて、ビルドプロセスの一部として生成されたコードの使用を延期しました。

ビルド時に生成されたコードをアプリに統合する簡単な方法はありますか?

私が考えているコードの種類は、VisualStudioが実行するリソースおよび設定ファイルのコード生成に似ています。

  • ここにインテリセンスがあることは価値があります
  • 説明するのは簡単ですが、C#で簡潔に実装することは不可能な多くのプロパティとプロパティ間のリンクがあります。
  • 基盤となるリソースは変更可能であり、ユーザーの操作やジェネレーターの内部を理解する必要なしに、コードが自動的に再生成されます。

(非現実的な)例として、同様の名前のC#プロパティ(またはメソッド)を介して正規表現の名前付きキャプチャグループへのアクセサーを生成したプリコンパイラーを考えてみます。これは私が生成したい種類のものの典型です:主な機能がエラーのコンパイル時チェックを可能にすることであるボイラープレートラッパーの長いスニペット(上記;存在しないキャプチャグループへのアクセスまたは書き込みと無効な正規表現)それほど重要ではありませんが、これらのプロパティのインテリセンス。最後に、この設定はチームの他のメンバーが簡単に使用できる必要があります最小限の学習曲線しかありません。つまり、コードを再生成するために手動の介入を要求することも、生成されたコードをソース管理にコミットすることも絶対に受け入れられません。最悪の場合、誰もが何らかの拡張機能をインストールする必要があります。理想的には、拡張機能はソースツリーにインストール可能である必要があります。これにより、ツリーをチェックアウトする人は誰でも、紹介なしでプロジェクトをビルドできます。

それがうまく機能するためには、IDE統合が優れていることが重要です。基になる「リソース」定義ファイルを更新すると 、ユーザーの操作なしでコードの再生成がトリガーされます。理想的には、ジェネレーター自体は、後で他の開発者が簡単に保守できるようになります。 (つまり、ある程度のジェネレーターのデバッグ機能はプラスです)。

最後に、同じテンプレートをさまざまな入力リソースに適用できるXSLTのようなアプローチが理想的です。これは、リソースを更新するだけの場合は実際のジェネレーターコードを確認する必要がないことと、テンプレートの再利用が簡単になることの両方を意味します。

T4を見てきましたが、これは、テンプレートとリソースが完全に分割されていない、あまり便利ではないASPのようなアプローチです(つまり、ジェネレーターがリソースの検索を担当します。これにより、テンプレートの再利用が容易になりません。 )。

同じテンプレートを簡単に再利用でき、(.NET設定ファイルのように)リソースを更新すると実装されたコードの再生成が自動的にトリガーされるような、より優れた(よりクリーンな)ソリューションまたはT4を実行する方法はありますか?

要約: 私はできるコード生成アプローチを探しています

  1. 基盤となるリソース(テンプレートではありません!)が変更されたときに、開発者の介入なしにコードを自動的に再生成します。
  2. メンテナンスがやや簡単
  3. 複数のリソース間で同じジェネレーターテンプレートを共有できるようにします(これは、ポイント#1では、リソースがジェネレーターを参照する必要があり、その逆ではないことを意味します)。
4

2 に答える 2

6

T4ToolboxからT4ScriptFileGeneratorを使用できます。「リソース」ファイルの「カスタムツール」プロパティをT4ScriptFileGeneratorに変更し、変更を保存します。カスタムツールは、新しい空のT4スクリプト(.ttファイル)を生成します。コード生成ロジックをこの.ttファイルに配置します。リソースファイルを変更(および保存)するたびに、T4ScriptFileGeneratorは.ttファイルを使用して出力コードを生成します。これがどのように機能するかの例については、「リソース」として.dbmlファイルを使用するT4Toolboxの「LINQtoSQLModel」ジェネレーターを参照してください。このジェネレーターによって作成された.ttファイルでは、すべてのコード生成ロジックが個別の.ttファイルに存在し、includeディレクティブを使用して再利用されていることがわかります。

于 2009-11-12T14:46:46.320 に答える
0

ABSE(http://www.abse.info)を監視することをお勧めします。ABSEは、プラットフォームと言語の点で完全に不可知論的なコード生成およびモデル駆動型のソフトウェア開発方法論であるため、C#やその他の必要なもの用に独自のジェネレーターを作成するのに問題はありません。大きな利点は、希望どおりにコードを生成できることです。欠点は、テンプレートを作成するために最初に行う作業が増える可能性があることです。

ABSEを使用すると、ドメイン知識を「アトム」に取り込むことができます。アトムは、基本的に、構築できるより大きなモデルのフラグメントです。ABSEは、宣言型で実行可能です。モデルは、仕様に基づいてコードを生成し、モデルレベルでカスタムコードを組み込むことができます。

残念ながら、ABSEはまだ進行中であり、統合開発環境(AtomWeaverという名前)はまだ作成中です。とにかく、ジェネレーターのCTPリリースは2010年1月に予定されているので、私たちはすでにそれに近づいています。

于 2009-11-15T22:42:04.770 に答える