5

私はPOCOタイプの生成の多くを単純化するためにアセンブリを書いています。複数のttファイルが含まれ、コードの生成に使用する1つのコアアセンブリがあります。

私がこれを行った理由は、どの拡張機能(Devart T4、Tangible-T4、またはVisual T4)を試しても、Visual StudioのC#エディターによって提供されるインテリセンスとサポートほど優れているものはないため、純粋なC#でコード生成を記述すると改善されますたくさんの経験。

私が直面している最大の問題は、エンティティフレームワークヘルパークラス(たとえばAccessibilityCodeGenerationToolsなどMetadataTools)がアセンブリではなくttincludeファイル内で定義されているという事実です。現在、これらのクラスが提供する多くの機能を、アセンブリから使用できるように書き直す必要があります。

私の質問は、なぜエンティティフレームワークチームがいくつかのコンパイルされたアセンブリではなくttincludeファイルを使用することを決定したのですか?アセンブリアプローチを使用すると、より多くの状況ではるかに使いやすくなり、T4コード生成に影響を与えなかったようです(使用<#@ include #>する代わりに<#@ assembly #>)。

これを解決するための最善のアプローチは何か疑問に思っています。生成されたC#を実行EF.Utility.CS.ttincludeしてTextTransform.exeから取得し、これをコンパイルすることを検討しました。これはお勧めできますか?

ありがとう、ルーク

アップデート

現在、私が行ったことEF.Utility.CS.ttincludeはプロジェクトに追加することでした。ファイルのカスタムツールをに設定しますTextTemplatingFilePreprocessor。これにより、クラスを含むコードが生成されます。次に、このcsファイルをコピーし、出力の書き込みを担当するクラス(メソッドがあります)を削除しTransformText()て、アセンブリにコンパイルしました。これで、アセンブリでエンティティフレームワークユーティリティクラスを使用できます。

4

1 に答える 1

3

アセンブリの代わりに使用する理由ttincludeは、クラス生成にカスタムツールの代わりにT4を使用するのと同じです(これは実際に行っていることであり、ほとんどのデザイナーが以前に使用したことです)。T4とttinclude変更することができます。小さな変更をコピーttincludeして作成し、プロジェクトごとの基本事項ごとにメインのT4に含めることができます。

ところで。インテリセンスなしでコードを記述できるプログラマーが何万人もいることをご存知ですか;)インテリセンスのサポートが悪化しても、T4テンプレートの使用をあきらめる理由にはなりません。

于 2012-01-25T10:14:28.160 に答える